一、pytest常用断言类型
等于:==
不等于:!=
大于:>
小于:<
属于:in
不属于:not in
大于等于:>=
小于等于:<=
是:is
不是:is not
def test_two():
assert 1==1
assert 1 != 2
assert 1 < 2
assert 1 > 2
assert 1 >= 1
assert 1 <= 1
assert 'a' in 'abc'
assert 'a' not in 'bcd'
assert True is True
assert 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==200
result=r.json()
assert result['status']==0
assert 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 None
assert 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=1
actual=1
assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等
def test_two():
expect=1
actual=1
assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等
if __name__=='__main__':
pytest.main()#会把我们当前用例中的其他测试用例符合条件的都执行
4.1模块级示例:可以看到模块级setup_module/teardown_module开始于模块始末,仅执行一次
import requests
def setup_module():
print("准备测试数据")
def teardown_module():
print("清理测试数据")
def test_mobile1():
expect=1
actual=1
assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等
def test_mobile2():
expect=1
actual=1
assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等
def test_mobile3():
expect=1
actual=1
assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等
def test_mobile4():
expect=1
actual=1
assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等
if __name__=='__main__':
pytest.main()
4.2函数级示例:可以看到每一条函数执行之前和执行之后各执行一次,setup_function/teardown_function,函数执行多少次它执行多少次。这是不在类class中的
import requests
def setup_function():
print("准备测试数据")
def teardown_function():
print("清理测试数据")
def test_mobile1():
expect=1
actual=1
assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等
def test_mobile2():
expect=1
actual=1
assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等
def test_mobile3():
expect=1
actual=1
assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等
def test_mobile4():
expect=1
actual=1
assert expect==actual#测试专用语句:assert,识别期望与实际值是否相等
if __name__=='__main__':
pytest.main()
4.3类级示例:可以看到在类中前后运行一次
import requests
class TestMobile:
def setup_class(self):
print("准备测试数据")
def teardown_class(self):
print("清理测试数据")
def test_mobile1(self):
expect = 1
actual = 1
assert expect == actual # 测试专用语句:assert,识别期望与实际值是否相等
def test_mobile2(self):
expect = 1
actual = 1
assert expect == actual # 测试专用语句:assert,识别期望与实际值是否相等
def test_mobile3(self):
expect = 1
actual = 1
assert expect == actual # 测试专用语句:assert,识别期望与实际值是否相等
def test_mobile4(self):
expect = 1
actual = 1
assert expect == actual # 测试专用语句:assert,识别期望与实际值是否相等
if __name__=='__main__':
pytest.main()
4.4方法级示例:方法在类中,类中的方法级,可以看到在类中的每个函数都执行一次
import requests
class TestMobile:
def setup_method(self):
print("准备测试数据")
def teardown_method(self):
print("清理测试数据")
def test_mobile1(self):
expect = 1
actual = 1
assert expect == actual # 测试专用语句:assert,识别期望与实际值是否相等
def test_mobile2(self):
expect = 1
actual = 1
assert expect == actual # 测试专用语句:assert,识别期望与实际值是否相等
def test_mobile3(self):
expect = 1
actual = 1
assert expect == actual # 测试专用语句:assert,识别期望与实际值是否相等
def test_mobile4(self):
expect = 1
actual = 1
assert expect == actual # 测试专用语句:assert,识别期望与实际值是否相等
if __name__=='__main__':
pytest.main()