pytest

一、pytest简介

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

  2. pytest可以和selenium、requests、appium结合实现web自动化,接口自动化,app自动化测试

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

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

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

  6. pytest强大的插件:

    • pytest-html:生成html格式的自动化测试报告

    • pytest-xdist:测试用例分布式执行,多CPU分发。

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

    • pytest-rerunfailures:用例失败后重跑

    • allure-pytest:生成美观的测试报告

批量添加插件方法:新建一个文件:requirements.txt,通过pip install -r requirements.txt

二、pytest使用规范以及基础应用

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

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

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

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

  1. 主函数模式:

    • 运行所有:pytest.main()

    • 指定模块:pytest.main(['-vs', '模块名'])

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

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

  2. 命令行模式

    • 运行所有

    • 指定模块

    • 指定目录

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

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

    • 位置:一般放在根目录

    • 编码:必须是ANSI格式

    • 作用:改变pytest默认的行为

    • 运行规则:不管事主函数模式,还是命令行模式都要读取这个配置文件

    [pytest]
    addopts = -vs           #命令行参数,用空格分隔    
    testpaths = ./<u>文件名</u>            #测试用例路径,可自行配置。
    python_files = test_*.py            #模块名称开头
    python_classes = test*            #类名称开头
    python_functions = test         #方法名称开头

    【需要使用notpad++修改编码格式】

    3.2参数详解

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

    -v:显示详细信息

    -vs:这两个参数一起用

    -n:支持多线程或者分布式运行测试用例,as:-n 2 、pytest.main(['-vs', './目录名','-n=2'])则为两个线程

    --reruns 2:失败用例重跑 pytest.main(['-vs', './目录名','--reruns=2'])

    -x:只要失败了一个就停止测试

    --maxfail=2:失败两个用例就停止测试

    -k:根据用例的部分字符测试指定用例 as:pytest.main(['-vs', './目录名','-k “xx”'])

    -m:添加标记 @pytest.mark.自定义() 执行方法as:pytest.main(['-vs', '-m "smoke"'])

    --html ./report/report.html:生成测试报告,在pytest.ini addopts中添加

    3.3 pytest执行顺序

    pytest:从上到下执行

    unittest:通过asull码大小执行

    改变顺序方法:通过mark加标记 as:@pytest.mark.run(order=1)则为第一个执行

四、如何分组执行(冒烟测试,分模块执行,分接口和web执行)

  1. 冒烟用例:

    • 在用例上加标记 as:@pytest.mark.smoke

    • 在pytest.ini中加上

      markers = 
          smoke:冒烟用例
    • 运行程序:pytest -m 'smoke'

4.1pytest跳过测试用例

  1. 无条件跳过:@pytest.mark.skip(reason="原因")

  2. 有条件跳过:@pytest.mark.skipif(age>=18,reason="原因")

五、pytest框架实现一些前后置(固件,夹具)的处理

5.1 setup/teardown,setup_class/teardown_class

  1. 在每个类执行前的初始化工作:def setup_class(self):print('xxxx') 场景:创建日志对象,创建数据库的连接,创建接口的请求对象

  2. 在每个用例前的初始化工作:def setup(self):print('xxxx') 场景:web端时,打开浏览器,加载网页

  3. 在执行用例后的扫尾工作:def teardown(self):print('xxxx') 场景:web端时,关闭浏览器

  4. 在每个类执行后的扫尾工作:def teardown_class(self):print('xxxx') 场景:销毁日志对象,断开数据库的连接,销毁接口的请求对象

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

@pytest.fixture(scope="", params="", autouse="", ids="", name="")
  1. scope:表示被@pytest.fixture标记的方法的作用域。function(默认),class,module,package/session。

  2. params:参数化,支持列表[],元祖(),字典列表[{},{}],字典元祖({},{})

    @pytest.fixture(scope='function', params=['茶π', '杯子'])
    def my_fixture(request):
        print('前置')
        yield request.param
        print('后置')
    ​
    class TestLogin:
    ​
        def test_01_gyj(self):
            print('测试一下')
    ​
        def test_02_ggg(self, my_fixture):
            print('啦啦啦')
            print('--------------'+str(my_fixture))

  3. autouse=true:自动执行,全部实现前后置。默认为false

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

  5. name:给表示的是别@pytest.fixture标记的方法去一个别名,使用别名后就得使用别名

    @pytest.fixture(scope='function', params=['茶π', '杯子'], ids=['chapai', 'beizi'], name='aaaa')
    def my_fixture(request):
        print('前置')
        yield request.param
        print('后置')
    ​
    ​
    class TestLogin:
    ​
        def test_01_gyj(self):
            print('测试一下')
    ​
        def test_02_ggg(self, aaaa):
            print('啦啦啦')
            print('--------------' + str(my_fixture))

5.3通过conftest.py和@pytest.fixture()结合使用实现全局的前置应用(as:项目的全局登录,模块的全局登录)

  1. conftest.py文件是单独存放的一个夹具配置文件,名称不能更改。

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

  3. 原则上conftest.py需要和运行的用例放到同一层,并且不需要做任何的import导入操作

5.4 总结

  • setup/teardown,setup_class/teardown_class是作用于所有用例或者所有的类。

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

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

六、allure-pytest报告

  1. 下载地址:Releases · allure-framework/allure2 · GitHub

  2. 将bin路径配置到path中

  3. 验证是否安装:allure --version。重启pycham

  4. 在pytest.ini中添加--alluredir ./temp 生成json格式的临时文件

  5. 在all.py中添加os.system('allure generate ./temp -o ./report --clean')

    • allure generate 固定语法

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

    • -o 表示输出 output

    • ./report 生成allure报告的路径

    • --clean 清空./report路径下原来的报告

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值