unittest11--运用DDT调试项目
调试project_M1
目的:运用ddt数据驱动模块调试完善exam项目测试脚本
调试postdata中的第十五行考虑数据类型转换
import requests
from project_M1.common import log
def post(address, argument, case_name, expect):
"""
:param address: 接口地址
:param argument: 请求参数
:param case_name: 用例名称
:param expect: 预期结果
:return:
"""
try:
# 发送请求 判断响应结果的正确性
res = requests.post(url=address, data=eval(argument))
if 'text/html' in res.headers['Content-Type']: # 表示响应内容的类型是字符串
actual = res.text
# 结果比对
if expect in actual:
log.log().info('比对登录接口返回==' + case_name + '==通过')
return True
else:
log.log().warning('比对登录接口返回==' + case_name + '==失败==预期结果:' + expect + ',实际结果:' + actual)
return False
elif 'application/json' in res.headers['Content-Type']:
actual = res.json() # 实际结果(字典)
# 比对接口返回结果
if expect == actual:
log.log().info("比对注册接口返回==" + case_name + '==通过')
return True
else:
log.log().warning('比对注册接口返回==' + case_name + '==失败==预期结果:' + str(expect) + ',实际结果:' + str(actual))
return False
else: # xml
pass # 暂时不写代码
except Exception as e:
log.log().error('发送数据,比对响应结果出错')
if __name__ == '__main__':
post('http://192.168.139.137/exam/login/', {'username': 'admin', 'password': '123456'}, '成功登录测试', '登录成功')
使用DDT完成login代码
from project_M1.common import db, log, serverconf, casedata, postdata
import unittest
from ddt import ddt, data, unpack
# 读测试用例数据
cases = casedata.read_cases('login.xlsx') # 用例:用例名0、参数数据1、预期结果2
@ddt
class Login(unittest.TestCase):#unittest.TestCase不可以省略
@classmethod
def setUpClass(self) -> None:# Login类中所有测试用例之前先做下面代码
# 数据库初始化
db.DB().init_db(['login.sql'])
# 读接口服务器地址
host = serverconf.ServerConf().get_host()
self.address = host + '/exam/login/'
@data(*cases) # @data参数中不能使用self.、cls.
# cases是二维列表,有多行多列,@data(*cases)意思是拆出多行用例,
# 一行用例做一次循环,循环一次执行一次所修饰的test方法,
# 假设cases中有5个子列表,可以理解为5行,就会循环执行test_login五次
@unpack # 对cases中的每一行中的列进行拆分
def test_login(self, case_name, argument, expect):
# self 不能省略 定义一个测试用例测试登录接口测试用例
"""
测试登录接口
:return:
"""
result = postdata.post(self.address, argument, case_name, expect)
self.assertTrue(result)
if __name__ == '__main__': # 只有自己的文件才执行下面的代码,别人导入自己的文件后不执行
unittest.main() # 执行所有test开头的测试用例(类中的方法)
使用ddt完成signup代码
from project_M1.common import db, log, serverconf, casedata, postdata
import unittest
from ddt import ddt, data, unpack
@ddt
class Signup(unittest.TestCase): # 测试用例类 测试类
# 读注册接口测试用例:signup.xlsx
cases = casedata.read_cases('signup.xlsx')
@classmethod
def setUpClass(self) -> None:
# 数据库初始化(执行注册接口的初始化语句)
db.DB().init_db(['signup.sql'])
# 注册接口测试用例:signup.xlsx
self.cases = casedata.read_cases('signup.xlsx')
# 接口地址
self.host = serverconf.ServerConf().get_host()
self.address = self.host + '/exam/signup/'
@data(*cases) # 拆出行
@unpack # 拆出列
def test_signup(self, case_name, argument, expect, expectsql, expect_db_rows): # 必须test开头
"""
测试注册接口
:return:
"""
result = postdata.post(self.address, argument, case_name, eval(expect))
self.assertTrue(result)
dbresult = db.DB().check_db(case_name, expectsql, argument, expect_db_rows)
self.assertTrue(dbresult)
if __name__ == '__main__':
unittest.main()
本文来自博客园,作者:暄总-tester,转载请注明原文链接:https://www.cnblogs.com/sean-test/p/15522430.html

浙公网安备 33010602011771号