测试框架Pytest-pytest测试用例的运行实操

news2024/11/30 11:27:28

 

一、单元测试框架

1、什么是单元测试框架

单元测试是指在软件开发当中,针对软件的最小单位(函数、方法)进行正确性的检查测试。

2、单元测试框架

java:junit和testing

python:unittest和pytest

3、单元测试框架主要做什么?

1)测试发现:从多个文件里面去找到我们的测试用例

2)测试执行:按照一定的顺序和规划去执行,并产生结果

3)测试判断:通过断言判断预期结果和实际结果的差异

4)测试报告:统计测试进度,耗时,通过率,生成测试报告

二、Pytest简介

1.pytest是一个非常成熟的python单元框架,比unittest更灵活,容易上手。

2.pytest可以和selenium,requests,appnium结合实现web自动化,接口自动化,app自动化。

3.pytest可以实现测试用例的跳过以及request失败用例重试。

4.pytest可以和allure生成非常美观的测试报告。

5.pytest可以和jenkins持续集成。

6.pytest有非常强大的插件,并且这些插件能够实现很多实用的操作,如:

pytest-html(生成html格式的自动化测试报告)

pytest-xdist 测试用例分布式执行。多cpu分发

pytest-ordering 用于改变测试用例的执行顺序

pytest-rerunfailures 用于用例失败后重跑

allure-pytest 用于生成美观测试报告

三、使用pytest默认的规则

1.模块名必须以test_开头或者_test结尾

2.测试类必须以Test开头,并且不能有init方法。

3.测试方法必须以test开头

四、pytest测试用例的运行方式

1.主函数模式

1)运行所有 pytest.main()

2)运行指定模块 pytest.main(['-sv','test_product.py'])

3)指定目录:pytest.main(['-vs','./interface_testcase'])

4)通过nodeid指定用例运行:nodeid由模块名,分隔符,类名,方法名,函数名组成

pytest.main(['-vs','interface_testcase/test_interface.py::TestInterface::test_03_zzz'])(py文件中的某个类下面的某个方法)

2.命令行模式

1)运行所有:pytest

2)运行指定模块:pytest -sv test_product.py

3)运行指定目录: pytest -vs ./interface_testcase

4)通过nodeid指定用例运行:nodeid由模块名,分隔符,类名,方法名,函数名组成

pytest -vs interface_testcase/test_interface.py::test_04_func (py文件中的某个方法)

pytest -vs interface_testcase/test_interface.py::TestInterface::test_03_zzz(py文件中的某个类下面的某

个方法)

参数详解:

-s:表示输出调试信息,包括print打印的信息

-v:显示更详细的信息

-vs:两个参数可以一起

-n:支持多线程,分布式运行测试用例

>pytest -vs ./interface_testcase -n 2

--reruns num 失败用例重跑 (函数模式“=” --reruns=2)重跑两次 共计跑3次

-x 表示只要一个用例报错,测试停止

--maxfail=2 出现两个用力失败就停止

-k 根据测试用例的部分字符串指定测试用例

如:>pytest -vs ./interface_testcase -n 2 -k "aa",执行了包含了aa的用例

--html ./report/report.html :生成html测试报告

3.配置文件模式

通过读取pytest.ini配置文件运行

pytest.ini这个文件它是pytest单元测试框架的核心配置文件。

注意ini中最好不要写入中文,运行 会报错'gbk' codec can't decode byte 0x80 in position 92: illegal multibyte sequence

[pytest] addopts = -vs 命令行的参数 用空格分隔 testpashs = ./ 测试用例的路径 python_file = test_* 模块名规则 python_classes = Test 类名规则 python_functions = test 方法名规则

1)位置:一般放在项目的根目录

2)编码:必须是ANSI,可以使用notepad++修改编码格式

3)作用:改变pytest的默认行为

4)运行规则:不管是主函数的运行模式,还是命令行模式运行,都会去读取这个配置文件

五、pytest测试用例的执行顺序

1、pytest就是从上到下排序

改变默认的执行顺序,使用mark标记(run可以随便定义 也可以定义为smoke)

2、跳过测试用例

无条件跳过:

有条件跳过

六、Pytest框架实现一些前后置处理

1、setup/teardown,setup_class/teardown_class

class TestLogin:
    age =11
    #在所有用例之前只执行一次

    def setup_class(self):
        print("在每个类执行之前操作,比如创建日志对象、创建数据库链接、创建接口请求对象")


    def setup(self):
        print("在执行用例前执行前置操作")

    def test_01_baili(self):
        time.sleep(1)
#        assert 1==2
        print('111111111111')
    @pytest.mark.skip(reason="就是不想执行该用例")
    def test_04_ff(self):
        print("ff")

    @pytest.mark.abc
    @pytest.mark.skipif(age>10,reason="已成年")
    def test_06_kk(self):
        print("kk")

    @pytest.mark.run(order=1)  #第一个执行
    def test_03_mm(self):
        print("mm")
    @pytest.mark.abc
    def test_05_pp(self):
        print("pp")

    def teardown(self):
        print("在执行测试用例后进行的后置操作")

    def teardown_class(self):
        print("在每个类执行之后操作,比如销毁日志对象、数据库链接、接口请求对象")

2、使用@pytest.fixture()装饰器来实现部分用例的前后置

@pytest.fixture(scope="",params="",autouse="",ids="",name="")

scope表示的是被@fixture标记的方法的作用域。function(默认),class,moudle,package/session.

params:参数化 (支持列表、元组、字典列表、字典元组) yield也相当于一个return

autouse=True:自动执行,默认False,自动每个用例都使用

ids:当使用params参数化时,给每一个值设置一个变量名。意义不大。

name:给表示的是被@pytest.fixture标记的方法取一个别名。

使用别名替换my_fixture,用例调用智能用别名

3、通过conconftest.py和@pytest.fixture()结合使用实现全局的前局的前置应用

比如:项目的前局登录、模块的前局处理、

1).conftest.py文件时单独存放的一个夹具,名称不可以被更改

2).用处可以在不同的py文件中使用同一个fixture函数

3).conftest.py需要和要执行的文件放在同一级,不需要进行import导入

三种前后置方法总结:

setup/teardown,setup_class/teardown_class 它是作用于所有用例或所有类

@pytest.fixture(),它的作用是既可以部分也可以前后置。

conftest.py和pytest.fixture()结合使用,作用于全局的前后置

七、pytest结合allure-pytest插件生成allure测试报告

pytest.html

allur-pytest

1、下载、解压、配置环境变量path路径

验证:allure --version

问题:dos验证通过,pycharm未通过,重启pycharm

2、生成json格式的临时报告

--alluredir ./temp

3、生成allure报告

os.system('allure generate ./temp -o ./report --clean')

allure generate 命令,固定的

./temp 临时的json格式报告的路径

-o 输出

--clean 清空原来的报告

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/84833.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于JSON的SQL注入攻击触发需要更新Web应用程序防火墙

©网络研究院 安全研究人员开发了一种通用的 SQL 注入技术,可以绕过多个 Web 应用程序防火墙 (WAF)。问题的核心是 WAF 供应商未能在 SQL 语句中添加对 JSON 的支持,从而使潜在的攻击者可以轻松隐藏其恶意负载。 Claroty Team82 的研究人员发现的绕…

绿盟SecXOps安全智能分析技术白皮书 思路方案

安全数据资产 统一管理DataOps,即 Data 和 Operations 的集成,于 2014 年首次提出。Gartner 将 DataOps 定义为“一种协作性的数据管理 实践,专注于改进组织内数据管道的通信、集成和自动化”[7]。DataOps 是一种面向流程的自动化方法&#x…

【C++笔试强训】第六天

文章目录选择题编程题选择题 1.十进制变量i的值为100&#xff0c;那么八进制的变量i的值为&#xff08;&#xff09; A 146 B 148 C 144 D 142 进制之间的转化&#xff0c;这不用多说了把 2.执行下面语句后的输出为 int I1; if(I<0)printf("****\n") ; els…

大数据Kudu(四):Kudu集群搭建

文章目录 Kudu集群搭建 一、kudu 安装包 二、节点规划及安装 1、首先在每个节点上传安装包 2、在node1、node2节点上安装如下rpm安装包 3、在node3节点上安装如下rpm安装包 4、配置Master Server 5、配置Tablet Server 6、Master节点配置所有Master Server 7、Server…

对DataFrame中元素进行定位并修改的DataFrame.iat[]方法

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 根据指定的行和列的位置号 显示或修改DataFrame中相应位置的元素 DataFrame.iat[x,y] 选择题 关于以下python代码说法错误的一项是? import pandas as pd df pd.DataFrame({"A"…

手把手教你搭建自己的FTP文件服务器

大家好&#xff0c;我是小豪&#xff0c;今天我来给大家分享如何在虚拟机上搭建自己的文件服务器 文章目录Linux上安装文件服务器FTP安装VSFTP下载dnf下载VSFTP清除防火墙的iptables缓存下载FTP匿名访问模式本地用户模式Linux上安装文件服务器FTP 由于FTP、HTTP、Telnet等协议…

【阿里实践】基于深度学习的个性化推荐系统实时化改造与升级

省时查报告-专业、及时、全面的行研报告库省时查方案-专业、及时、全面的营销策划方案库【免费下载】2022年11月份热门报告盘点推荐技术在vivo互联网商业化业务中的实践.pdf推荐系统基本问题及系统优化路径.pdf大规模推荐类深度学习系统的设计实践.pdf荣耀推荐算法架构演进实践…

doom emacs如何安装新插件和自定义快捷键

doom emacs如何安装新插件和自定义快捷键 最近在学习和使用doom emacs&#xff0c;遇到了2个问题。 问题1: 虽然doom emacs已经配置了很多的三方插件&#xff0c;但是还有些个性化的插件如何按doom风格添加&#xff1f; 问题2: 有些快捷键自己已经熟悉&#xff0c;如何修改&am…

双目密集匹配及SGM算法

提示&#xff1a; 双目密集匹配及SGM算法前言一、双目密集匹配1、双目密集匹配概述2.、双目密集匹配四大步骤代价计算&#xff08;per-pixel-cost&#xff09;&#xff1a;释义&#xff1a;代价聚集&#xff08;cost-aggregation&#xff09;:释义&#xff1a;分类&#xff1a;…

以就业为目标,Python到底应该学什么?

前言 很多小伙伴知道Python火爆薪资高&#xff0c;开始自学&#xff0c;可是并不知道Python应该学哪些技术、学到什么程度才能找到工作。今天我们就来分析一下&#xff0c;Python学到什么程度才能找到工作。 相关&#xff1a;我是今年刚刚毕业的不入流大学的本科生&#xff0…

KingbaseES Create Index Concurrently 过程探究

前言&#xff1a; 我们知道Oracle 可以通过create index online 在线创建索引&#xff0c;而不影响其他会话修改数据&#xff0c;但Oracle 实际在online 创建索引的最后一步&#xff0c;实际还是需要进行锁升级&#xff0c;申请表级的S锁&#xff0c;因此&#xff0c;最后还是有…

STM32CUBEMX开发GD32F303(17)----内部Flash读写

概述 本章STM32CUBEMX配置STM32F103&#xff0c;并且在GD32F303中进行开发&#xff0c;同时通过开发板内进行验证。 本例程主要讲解如何对芯片自带Flash进行读写&#xff0c;用芯片内部Flash可以对一些需要断电保存的数据进行保存&#xff0c;无需加外部得存储芯片&#xff0c…

广告公司到底干什么的?欣奥诚分享

广告公司到底干什么的&#xff1f; 这篇文章从产业的角度拆分广告业&#xff0c;还原一个真实的广告业出来。 01. 它们是谁&#xff1f; 早年广告业有4类公司&#xff1a;品牌咨询类公司&#xff1b;设计创意类公司&#xff1b;媒介投放类公司&#xff1b;活动执行类公司。 …

[附源码]Python计算机毕业设计电子病历系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

前端大全之JavaScript(简称JS)

目录 一、概念 1.总体概要 2.来源说明 3.JavaScript和java的关系 4.JS的特点 5.浏览器执行JS的简介 6.JS的组成 二、引入方式 1.内部脚本例子 2. 外部脚本例子 三、使用规则 1.书写语法 2.报错的查看方式 3.输出语句 &#xff08;1&#xff09;写入警告框 &am…

SecXOps 中的数据集存储方式

安全数据资产 统一管理DataOps&#xff0c;即 Data 和 Operations 的集成&#xff0c;于 2014 年首次提出。Gartner 将 DataOps 定义为“一种协作性的数据管理 实践&#xff0c;专注于改进组织内数据管道的通信、集成和自动化”[7]。DataOps 是一种面向流程的自动化方法&#x…

基于Java开发的(控制台)模拟的多用户多级目录的文件系统【100010035】

多级文件系统 1 设计目的 为了加深对文件系统内部功能和实现过程的理解&#xff0c;设计一个模拟的多用户多级目录的文件系统&#xff0c;并实现具体的文件物理结构、目录结构以及较为完善的文件操作命令集。 2 设计内容 2.1系统操作 操作命令风格&#xff1a;本文件系统的…

110115-07-6,Ac-LLM-CHOCalpain 抑制剂

Ac-LLM-CHO (ALLM) is a potent competitive inhibitor of cathepsin L (Ki0.6 nM) and cathepsin B (Ki100 nM). Ac-LLM-CHO (ALLM)是组织蛋白酶L (Ki0.6 nM)和组织蛋白酶B (Ki100 nM)的有效竞争性抑制剂。 编号: 124055中文名称: Calpain 抑制剂 II&#xff1a; Ac-Leu-Leu-M…

[附源码]Node.js计算机毕业设计点餐系统设计Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

游戏开发59课 性能优化

7. 耗电优化 游戏耗电和游戏卡并无必然联系&#xff0c;有些游戏在某些设备上虽然运行很流畅&#xff0c;但发现耗电很厉害&#xff0c;玩了不到半个小时&#xff0c;电量已经出现警报。游戏耗电的原因主要是因为&#xff1a;CPU占用普遍高&#xff0c;内存操作频繁&#xff0…