pytest、unittest --测试用例 - 用代码写测试用例、执行测试用例、生成测试结果
写测试用例:用例:前置后置、步骤、断言
1、报告 2、用例收集 3、执行用例 4、断言 5、数据驱动 6、重新运行失败用例 7、筛选 8、前置和后置的处理 9、加载测试用例
pytest 和 unittest 的区别
1.表达用例:
unittest:定义一个测试类,继承unittest.TestCase
pytest: 类、函数
2.断言的表达:
unittest:self.assertXXX()
pytets: assert 表达式()
3.收集用例:
unittest:TestLoader类 + TestSuite类, discover收集用例
pytest:自动收集
4、前置后置:
unittest:setup、teardown setupclass、teardownclass 固定名称
pytest:不固定名称(函数)、前置后置放在一个函数里,独立的 不与测试类放在一起
1、怎么知道函数它是一个前置还是后置?
@pytest.fixture
def init():
pass
2、怎么区分前置和后置
@pytest.fixture
def init():
driver = webdriver.Chrome()
driver.get("xxxx")
yield --后置
driver.quit()
3、作用域是什么?测试函数、类、模块、会话
@pytest.fixture (scope="")
function(测试用例)- class(测试类)- module(模块 .py文件) - session(会话)
4、如果返回数据
yield 后加返回值
共享:conftest.py -- 固定名称,专门存放fixture ,用例文件中不需要引入,直接调用fixture名称
调用: 5、测试用例中调用
@pytest.mark.usefixtures("函数名 init")
测试用例的参数:1)数据驱动 2)fixture的返回值
1)用例不需要使用fixture 返回值:一定要@pytest.mark.usefixtures
2)用例要使用fixture的返回值:
方式一:@pytest.mark.usefixtures(“”)。fixture函数名称作为用例参数
方式二:直接fixture函数名称作为用例参数
3)你需要的时候才调用
4)如果测试类下面,所有的测试用例都使用同一个函数级别的前置后置
那么可以直接在类名上声明调用:@pytest.mark.usefixtures(“函数级别的fixture”)
5、插件:
unittest:无
pytest:700+
筛选用例:
1) 给用例打标记 -- 一般冒烟或者回归使用
先注册 创建pytest.ini 文件下 [pytest] marker =
在用例/类上面:@pytest.mark.标记名称
2) 运行的时候,只运行标记用例
收集机制: 1、目录:pytest命令转载那个目录下执行,那就默认从那个文件目录下开始搜索用例
2、文件:目录下所有的文件都需要去看是否有用例吗? 不需要 目录下,有文件、子包 符合以下标准的文件,才会去文件中确认是否有用例 标准:1).py 2)文件名以test_开头或者_test结尾
3、用例名称:以test_开头的函数,或者以Test开头的类的下面,以test_开头的方法
执行顺序: 1)文件名称 - ASCII排序 那个文件先识别,那个文件下的用例先执行 2)文件内部:代码的先后顺序从上到下执行
|