一、pytest常用断言类型
等于:==
不等于:!=
大于:>
小于:<
属于:in
不属于:not in
大于等于:>=
小于等于:<=
是:is
不是:is not
def test_two():assert 1==1assert 1 != 2assert 1 < 2assert 1 > 2assert 1 >= 1assert 1 <= 1assert 'a' in 'abc'assert 'a' not in 'bcd'assert True is Trueassert False is not True
二、requests+pytest
import requests
def test_mobile():r = requests.get(url="https://api.binstd.com/shouji/query", params={"shouji": "13456755448","appkey": "e1d1e3c8fb254b33"})print(r.status_code)assert r.status_code==200result=r.json()assert result['status']==0assert result['msg'] == "ok"assert result['result']['shouji'] == "13456755448"assert result['result']['province'] == "浙江"assert result['result']['city'] == "杭州"assert result['result']['company'] =="中国移动"assert result['result']['cardtype'] is Noneassert result['result']['creacode'] == "0571"
这个操作,针对之前的requests模块对他进行一个优化对其自身用例进行改进初步实现我们用pytest进行接口测试的测试用例
三、pytest配置项
pytest.ini(固定写法,你如果写错是不生效的),ini在很多框架里面都是作为配置项去使用的。在写路径的时候是可以指定到某个具体的文件的
[pytest]
testpaths=./testcase
把要执行的目录直接配置到此处,通过终端输入运行pytest命令即可
四、pytest的setup/teardown(前置步骤和后置步骤)
在我们做自动化里面,前置和后置基本上是一个功能,比如我们在做UI自动化,前置需要打开浏览器,后置需要关闭浏览器。在做接口测试自动化,比如我们前置需要去登陆或者插入一些测试数据,做一些测试用例执行前的一个工作,在做完测试用例之后我们需要在后置步骤里面去做一些数据的清理,防止产生一些垃圾数据。
setup/teardown其实分为四个等级分别是:
**模块级–setup_module/teardown_module–开始于模块始末,生效一次;
函数级–setup_function/teardown_function–对每条函数用例生效(不在类中);
类级–setup_class/teardown_class–只在类中前后运行一次(在类中);
方法级–setup_method/teardown_method–开始于方法始末(在类中)。
**
如何将一个.py文件中两条绿色三角符号的测试用例都给运行出来?
答:
def test_one():expect=1actual=1assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等def test_two():expect=1actual=1assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等if __name__=='__main__':pytest.main()#会把我们当前用例中的其他测试用例符合条件的都执行
4.1模块级示例:可以看到模块级setup_module/teardown_module开始于模块始末,仅执行一次
import requestsdef setup_module():print("准备测试数据")
def teardown_module():print("清理测试数据")def test_mobile1():expect=1actual=1assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等
def test_mobile2():expect=1actual=1assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等
def test_mobile3():expect=1actual=1assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等
def test_mobile4():expect=1actual=1assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等if __name__=='__main__':pytest.main()
4.2函数级示例:可以看到每一条函数执行之前和执行之后各执行一次,setup_function/teardown_function,函数执行多少次它执行多少次。这是不在类class中的
import requestsdef setup_function():print("准备测试数据")
def teardown_function():print("清理测试数据")def test_mobile1():expect=1actual=1assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等
def test_mobile2():expect=1actual=1assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等
def test_mobile3():expect=1actual=1assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等
def test_mobile4():expect=1actual=1assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等if __name__=='__main__':pytest.main()
4.3类级示例:可以看到在类中前后运行一次
import requestsclass TestMobile:def setup_class(self):print("准备测试数据")def teardown_class(self):print("清理测试数据")def test_mobile1(self):expect = 1actual = 1assert expect == actual # 测试专用语句:assert,识别期望与实际值是否相等def test_mobile2(self):expect = 1actual = 1assert expect == actual # 测试专用语句:assert,识别期望与实际值是否相等def test_mobile3(self):expect = 1actual = 1assert expect == actual # 测试专用语句:assert,识别期望与实际值是否相等def test_mobile4(self):expect = 1actual = 1assert expect == actual # 测试专用语句:assert,识别期望与实际值是否相等if __name__=='__main__':pytest.main()
4.4方法级示例:方法在类中,类中的方法级,可以看到在类中的每个函数都执行一次
import requestsclass TestMobile:def setup_method(self):print("准备测试数据")def teardown_method(self):print("清理测试数据")def test_mobile1(self):expect = 1actual = 1assert expect == actual # 测试专用语句:assert,识别期望与实际值是否相等def test_mobile2(self):expect = 1actual = 1assert expect == actual # 测试专用语句:assert,识别期望与实际值是否相等def test_mobile3(self):expect = 1actual = 1assert expect == actual # 测试专用语句:assert,识别期望与实际值是否相等def test_mobile4(self):expect = 1actual = 1assert expect == actual # 测试专用语句:assert,识别期望与实际值是否相等if __name__=='__main__':pytest.main()