pytest高级操作

pytest安装
安装插件

pytest
pytest-html                               ( 生成html格式的自动化测试报告)
pytest-xdist                              测试用例分布式执行。 多CPU分发。
pytest-ordering                           用于改变测试用例的执行顺序
pytest-rerunfailures                      用例失败后重跑
allure-pvtest                             用于生成美观的测试报告。
放到requirements. txt中,通过pip install -r requirements.txt

python运行方式

主函数运行方式

1)运行所有: pytest main()
2)指定模块: pytest.main([-vs'test _login.py'])
(3)指定目录: pytest main(['-vs',' ./interface_ _testcase'])
4)通过nodeid指定用例运行: nodeid由模块名,分隔符,类名,方法名,函数名组成。
    执行这个包下,某一个函数
        pytest.main(["-vs",'/interface_ testcase/test jinterface. py::test_ 04 _func])

    执行类下某一个方法
        pytest. main(["-vs'./interface_ testcase/test _interface py::TestInterface::test_ 03 _ziliao'])

(5)多线程
    pytest .main ( ['-vs' ,'./testcase','-n=2'])

(6)测试用例执行失败后重跑,算本次用例有三次执行
    pytest .main(['-vs', './ testcase', '- - reruns=2 ' ] )

命令行运行方式

(1)运行所有: pytest
(2)指定模块: pytest -VS test login. py
(3)指定目录: pytest -VS ./interface_ testcase
(4)指定目录: pytest -VS /interface testcase/test interface. py:.test 04 func

参数详解

-s :表示输出调试信息,包括print打印的信息.
-v:显示更详细的信息
-vs :这两个参数一起用
-n :支持多线程或者分布式运行测试用例。-n跟的是线程数
    如: pytest -VS ./testcase/test_ login.py -n 2

--reruns NUM:失败用例重跑
    pytest -vs ./testcase --reruns 2

-x :表示只要有一个用例报错,那么测试停止
    pytest -vs ./testcase -x

--maxfail=2 出现两个用例失败就会停止
    pytest -vs ./testcase --maxfail 2

-k:根据测试用例的部分字符串指定测试用例,
    如字符串包含"ao"的用例
    pytest -vs ./testcas -k "ao"
--html ./reportreport. html :生成htm的测试报告。

通过读取pytest. ini配置文件运行。配置文件和主函数分开使用,有一个就可以,执行时优先读取ini文件

pytest.in这个文件它是pytest单元测试框架的核心配置文件。
1.位置: -般放在项目的根目录
2.编码:必须是ANSI ,可以使用notpad++修改编码格式。
3.作用:改变pytest默认的行为。
4.运行的规则;不管是主函数的模式运行,命令行模式运行,都会去读取这个配置文件。

pytest高级操作_第1张图片

[pytest]
addopts = -vs                    ##命令行的参数,用空格分隔
testpaths = ../pytestproiect     ##测试用例的路径
python files = test*.py          ##模块名的规则
python classes = Test*           #类名的规则
python functions = test          ##方法名的规则

执行顺序

unittest: asclI的大小来绝对的执行的顺序
pytest:默认从上到下
改变默认的执行顺序:使用mark标记,
    @pytest.mark.run(order=1)
    @pytest.mark.run(order=2)

执行顺序、冒烟、跳过
pytest高级操作_第2张图片

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

  • smoke :冒烟用例,分布在各个模块里面
  • pytest -vs -m “smoke”
  • pytest -vs -m “smoke or usermanage or productmanage”

pytest跳过测试用例
(1)无条件跳过
@pytest .mark. skip ( reason=“微微太漂亮”)

(2)有条件跳过
@pytest .mark. skipif (age>=18, reason=‘成年’,)

前后置
pytest高级操作_第3张图片

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

pytest高级操作_第4张图片
@pytest. fixture(scope=“”, params=“” ,autouse=" “,ids=” “,name=”")
(1 )scope表示的是被@pytest. fixture标记的方法的作用域。function(默认) , class , module ,package/session.
pytest高级操作_第5张图片pytest高级操作_第6张图片

(2)params :参数化(支持,列表[,元祖(),字典列表[{.0.0],字典元祖({,{.{})
pytest高级操作_第7张图片pytest高级操作_第8张图片

(3)autouse=True :自动执使用,默认False
pytest高级操作_第9张图片

(4)ids :当使用params参数化时,给每一个值设置一 个变量名。 意义不大。
(5)name :给表示的是被@pytest.fixture标记的方法取一个别名。
pytest高级操作_第10张图片

当取了别名之后,那么原来的名称就用不了了。

通过conftest.py和@pytest.fixture()

结合使用实现全局的前置应用(比如:项目的全局登录,模块的全局处理)
1.conftest. py文件是单独存放的一个夹具配置文件,名称是不能更改。
2用处可以在不同的py文件中使用同一个fixture函数。
3.原则上conftest py需要和运行的用例放到同一层 。并且不需要做任何的import导入的操作。
总结:
setup/teardown , setup_ Class/teardown _class 它是作用于所有用例或者所有的类
@pytest.fixtrue()它的作用是既可以部分也可以全部前后置。
conftest py和@pytest fixtrue()结合使用,作用于全局的前后置。

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

1.下载,解压,配置path路径。
    https://github.com/allure-framework/allure2/releases
    配置路径D:\Tools\allure-2.17.3\bin
    验证: allure --version
    问题: dos可以验证但是pycharm验证失败,怎么办,重启pycharm.|

2加入命令性成json格式的临时报告。
--alluredir ./temp
3.生成allure报告
    os.system('allure generate ./temp -o ./repost --clean')      基础语法   json临时报告   输出到 指定文件  清空原有报告
    os. system(allure generate ./temp -0./report --clean')
    allure generate         命令.固定的
    ./temp                           临时的json格式报告的路径
    -o                                     输出output
    ./report                         生成的allure报告的路径
    --clean                          清空/report路径原来的报告

实例

from uitl.excel import ExcelUitl
import time 

ex = ExcelUitl()
data = ex.get_data()
# 传参方式
# [['Test_001', '用户名', '密码', '备注'], ['Test_002',  '用户名', '密码', '备注']]

class TestRunner:
    def setup(self):
        self.start_time = time.time()

    def teardown(self):
       
        self.finish = time.time()
        print("执行用例所用时间:%.2f" % (self.finish - self.start_time))

    @pytest.mark.parametrize('tid, describe, modules, args', data)  # 用例模块
    @pytest.mark.flaky(reruns=1)      # 失败用例重跑
    def test_main(self, tid, describe, modules, args):
        self.logical_pc(modules)
        self.logger.info("编号:%s,登录%s" % (tid, modules))

你可能感兴趣的:(自动化测试,pytest,测试用例,python,软件测试)