unittest05--测试固件
测试固件(Test Fixture)
也称用例包裹方法
测试固件是固定的测试代码,整合了代码的公共部分
用于处理测试执行之前的准备工作和测试执行后的清理工作
如果代码需要在整个模块之前做,可以使用setUpModule,把代码放到方法体中
如果代码需要每个类之前做,可以使用setUpClass,把代码放到方法体中
如果代码需要每个用例之前做,可以使用setUp,把代码放到方法体中
测试固件的分类
setUpModule() -- 初始化工作
在执行模块中所有测试类之前执行且只执行一次的代码
放在测试类的外边、前面
tearDownModule() -- 结束初始化工作
在执行完模块中所有测试类之后执行且只执行一次的代码
放在测试类的外边、前面
setUpClass(cls)
在测试类加载时执行只执行一次
用于实现测试前的初始化工作
必须使用@classmethod修饰
形参使用cls或self均可,默认cls,常用self
tearDownClass(cls)
在测试类运行结束时执行只执行一次
用于实现测试类执行完成时的清理工作
必须使用@classmethod修饰
形参使用cls或self均可,默认cls,常用self
setUp(self)
用于实现每个测试方法执行前的准备工作
每个测试方法执行前执行一次
形参必须是self
tearDown(self)
用于实现每个测试方法执行完毕后的清理工作
每个测试方法执行完成后执行一次
形参必须是self
测试固件的使用
"""
测试固件的使用
"""
import unittest
class Ceshi(unittest.TestCase):
@classmethod
def setUpClass(cls):
print('本类中所有测试用例执行前只做一次的代码setUpClass')
def setUp(self) -> None:#-> None可以不写 表示返回值
print('本类中每一个测试用例执行前先做的代码setUp')
def tearDown(self) -> None:
print('本类中每一个测试用例执行完后做的代码tearDown')
@classmethod
def tearDownClass(cls) -> None:
print('本类中所有的测试用例执行完毕后才做一次的代码tearDownClass')
def test1(self):#Ceshi类的成员方法,test开头叫做测试用例
print('第一个测试用例test1')
def test2(self):
print('第二个测试用例test2')
# 执行测试
if __name__=='__main__':
unittest.main()
调试project_M1
将login进行调试 加入测试固件
from project_M1.common import db, log, serverconf, casedata, postdata
import unittest
class Login(unittest.TestCase):
@classmethod
def setUpClass(self) -> None:
# 数据库初始化
db.DB().init_db(['login.sql'])
# 读测试用例数据
self.cases = casedata.read_cases('login.xlsx') # 用例:用例名0、参数数据1、预期结果2
# 读接口服务器地址
host = serverconf.ServerConf().get_host()
self.address = host + '/exam/login/'
def test_login(self):
"""
测试登录接口
:return:
"""
try:
# 发送请求
for case in self.cases: # case代表一行用例
case_name = case[0] # 第0列,是用例名称
argument = eval(case[1]) # 要发送的参数
expect = case[2] # 预期接口的返回结果
postdata.post(self.address, argument, case_name, expect)
except Exception as e:
log.log().error('登录接口测试出错' + e)
if __name__ == '__main__': # 只有自己的文件才执行下面的代码,别人导入自己的文件后不执行
unittest.main() # 执行所有test开头的测试用例(类中的方法)
调试project_M1
将signup进行调试 加入测试固件
from project_M1.common import db, log, serverconf, casedata, postdata
import unittest
class Signup(unittest.TestCase): # 测试用例类 测试类
@classmethod
def setUpClass(self) -> None:
# 数据库初始化(执行注册接口的初始化语句)
db.DB().init_db(['signup.sql'])
# 注册接口测试用例:signup.xlsx
self.cases = casedata.read_cases('signup.xlsx')
# 接口地址
host = serverconf.ServerConf().get_host()
self.address = host + '/exam/signup/'
def test_signup(self): # 必须test开头
"""
测试注册接口
:return:
"""
try:
# 发送请求
for case in self.cases:
case_name = case[0] # 用例名称
argument = eval(case[1]) # 参数
expect = eval(case[2]) # 预期接口返回结果
sql = case[3] # 预期sql
dbexpect = case[4] # 预期数据库行数
# 发送请求
postdata.post(self.address, argument, case_name, expect)
# 落库检查
db.DB().check_db(case_name, sql, argument, dbexpect)
except Exception as e:
log.log().error('注册接口测试出错' + e)
if __name__ == '__main__':
unittest.main()
本文来自博客园,作者:暄总-tester,转载请注明原文链接:https://www.cnblogs.com/sean-test/p/15521253.html

浙公网安备 33010602011771号