pytest框架

一、ptest单元测试框架

1)什么是单元测试框架

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

2)单元测试框架

java:junit和testing

python:unittest和pytest

3)单元测试主要做什么?

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

2、测试执行:按照一定顺序和规则去执行,并生成结果

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

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

二、单元测试框架和自动化测试框架有什么关系?

1)什么是自动化测试框架

2)作用

1、提高测试效率、降低维护成本

2、减少人工干预,提高测试的准确性,增加代码的重要性

3、核心思想史让不懂代码的人也能够通过这个框架去实现自动化测试

3)pytest单元测试框架和自动化测试框架的关系

单位测试框架:只是自动化测试框架中的组成部分之一

pom设计模式:只是自动化测试框架中的组成部分之一

数据驱动...

关键字驱动

全局配置文件的封装

日志监控

selenium,requests二次封装

断言

报告邮件

更多.....

三、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格式的自动化测试报告,此场景用于如testReport中点击index.html)

pytest-xdist(测试用例分布式执行多CPU分发,此场景用于-n参数使用前必须安装的插件)

pytest-ordering(用于改变用例的执行顺序,此场景用于装饰器@pytest.mark.run(order=NUM)使用前必须安装的插件)

pytest-rerunfailures(用于失败用例重跑)

allure-pytest(用于生成美观的测试报告,此场景用于-reruns NUM参数使用前必须安装的插件)

一个一个安装有点麻烦,可以新建一个requirements.txt文件,通过在pycharm的Terminal中pip install -r requirements.txt一次性安装

四、使用pytest,默认的测试用例的规则以及基础应用

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

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

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

五、参数详解

-v:将调式信息展示出来,包括print打印信息

-s:将详细执行的哪条信息展示出来

-vs:结合以上信息

-n:多线程、分布式运行测试用例,提升执行用例时间(命令用法:“pytest -vs ./testcase -n 2”;主函数用法:pytest.main(["-vs","./testcase","-n=2"]))

--reruns NUM:失败用例重跑,NUM等于几就重跑几次(命令用法:pytest -vs ./testcase --reruns 2;主函数用法:pytest.main(["-vs","./testcase","--reruns=2"])

-x:只要有一个用例报错,那么测试停止(命令用法:pytest -vs ./testcase -x;主函数用法:pytest.main(["-vs","./testcase","-x"])

-maxfail=2 :只要有两个用例报错,那么测试停止(命令用法:pytest -vs ./testcase -maxfail 2;主函数用法:pytest.main(["-vs","./testcase","-maxfail=2")]

-k:根据测试用例的部分字符串指定测试用例,如只想执行所有带user字符串的用例(命令用法:pytest -vs ./testcase -user "user";主函数用法:pytest.main(["-vs","./testcase","-k=user"))

--html ./TestReport/index.html:生成html测试报告(pytest -vs --html ./TestReport/index.html)TestPeport为自己新建放报告的文件夹,index为具体报告生成名

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

1、主函数(main)

1)运行指定模块如testcase下test_article_addHotCnt.py,此方法场景运用于运行该模块中所有用例(如放到单个模块下调试用)

if __name__ == '__main__':

pytest.main(['-vs','test_article_addHotCnt.py'])

2)运行指定目录如testcase下所有用例,此方法场景运用于运行该目录下所有test_开头的所有用例(如放到testRun里)

if __name__ == '__main__':

pytest.main(['-vs','./TestCase'])

3)运行指定目录下指定模块下的指定用例,此方法场景运用于指定某个单条用例

if __name__ == '__main__':

pytest.main(['-vs','./TestCase/test_article_addHotCnt.py::Test_article_addHotCnt::test_addHotCnt_success'])

4)直接运行所有test_或_test结尾的用例

if __name__ == '__main__':

pytest.main(['-vs'])

2、命令

1)运行指定模块(模块中所有用例将被执行)

pytest -vs test_article_addHotCnt.py

2)运行指定目录(目录下所有模块的所有用例将被执行)

pytest -vs TestCase

3)运行指定目录下指定模块,指定模块下指定类,指定类下的指定方法(指定模块下的指定的用例将被执行)

pytest -vs ./TestCase/test_article_addHotCnt.py::Test_article_addHotCnt::test_addHotCnt_success

4)直接运行所有test_或_test结尾的用例

pytest -vs

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

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

1、位置:一般放到项目根目录

2、编码:必须是ANSI可以使用notpad++修改编码格式

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

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

5、配置文件的固定写法

[pytest]

  #命令行参数,用空格分隔

addopts = -vs -n --reruns 2...

  #测试用例路径(测试用例文件夹,可自己配置,比如你想把testcase换成hahah这里就写../hahah)

testpaths = ../testcase

  #模块名的规则(配置测试搜索的测试类名,可以自己配置,比如你想把testcase下所有模块改为haha开头才会被执行,这里就写haha_*.py)

python_files = test_*.py

  #类名的规则(配置测试搜素的测试类名,可以自己配置,比如你想把类名已haha开头才会被执行,则改为Haha*)

python_classes = Test*

  #方法名的规则(配置测试搜索的函数名,可以自己配置,比如你想函数名以aaa开头的才会被执行,则改为aaa)

python = test

  #定义被标记执行的用例,标记名自定义非固定(比如:smoke可以自定义为aaa)

markers =

    smoke:冒烟测试

article:文章模块

patient:患者模块

...

七、pytest执行测试用例顺序

1)默认从上到下执行

2 )装饰器@pytest.mark.run(order=NUM),用于改变默认的执行顺序,标记用例执行顺序,放到用例前,NUM等于几用例就第几个执行

八、如何分组执行(场景:冒烟、分模块执行、同一个项目里面分接口和ui执行)

在用例前使用装饰器@pytest.make.“标记名”,标记名取配置文件markers中自定义的名称

smoke:冒烟用例,分布在各个模块里面

pytest -vs -m“smoke”  #执行所有标记了@pytest.make.smoke的用例

pytest -vs -m“smoke or article”      #执行所有标记了@pytest.make.smoke和@pytest.make.article的用例

九、跳过用例

1、无条件跳过

@pytest.mark.skipif(reason='跳过测试')

2、有条件跳过

例:定义一个变量age=18

@pytest.mark.skipif(age>=18,reason='测试有条件跳过') #当装饰器中有age=18这个条件才跳过,如果是小于或者大于18则不跳过

你可能感兴趣的:(pytest框架)