0


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

一、单元测试框架

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 清空原来的报告

标签: 单元测试 junit

本文转载自: https://blog.csdn.net/weixin_43805705/article/details/128296718
版权归原作者 高阳很捷迅 所有, 如有侵权,请联系我们删除。

“测试框架Pytest-pytest测试用例的运行实操”的评论:

还没有评论