# 相关概念与项目概论
## Unittest介绍
Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些**校验返回的结果方法**和一些用例执行前的初始化操作
1. unittest.TestCase:TestCase类,所有测试用例类继承的基本类。
unittest.main()运行时,框架自动寻找Test.Case子类,并且运行
例如:class Test(unittest.TestCase):
2. setUp():setUp()方法用于测试用例执行前的初始化工作。如测试用例中需要访问数据库,可以在setUp中建立数据库连接并进行初始化。如测试用例需要登录web,可以先实例化浏览器。用于测试用例执行前自动被调用
3. tearDown():tearDown()方法用于测试用例执行之后的善后工作。如关闭数据库连接。关闭浏览器。
4. assert*():一些断言方法:在执行测试用例的过程中,最终用例是否执行通过,是通过判断测试得到的实际结果和预期结果是否相等决定的。
5. 定义测试用例,以“test_”开头命名的方法。在TestCase类中,只有把以test开头的方法当做测试用例,然后执行
## 数据驱动ddt
1、概念:它将测试中的测试数据和操作分离,数据存放在另外一个文件中单独维护。通过数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。
2@ddt : 类的装饰器,在测试类前引用
3@data:直接输入测试数据
## 一Conf:
**1 LogConf**:设置自定义log级别
Example:
import logging
user_define_log_level=logging.DEBUG
logging.basicConfig(
level=user_define_log_level, # 定义输出到文件的log级别,
format='[%(asctime)s][%(filename)s]-[%(funcName)s]-[%(lineno)d] [%(levelname)s] %(message)s', # 定义输出log的格式
datefmt='%Y-%m-%d %H:%M:%S', # 时间
)
if __name__ == '__main__':
logging.debug('一个debug信息')
**2Urlconf**:设置接口相关信息,包括protocol,domain,path,method等
Exaple:Product={ "Tour_Group_Product_Type": {
"protocol": "http",
"domain": "",
"path": "/tour/group/product/type",
"method": "get",
"comments": "获取产品类型"
}
## 二Data
测试数据集合:
不同的测试场景:不同的productID,AdultNum,ChildNum,ChildFreeNum
ProductSet = {
"data":[
{
"ProductID": "1111111",
"AdultNum": 2,
"ChildNum": 2,
"ChildFreedNum": 0,
"SelectedDate": ""
},]}
## 三Src
公共类common
1状态返回判断successJudge
class SuccessJudge:
def __init__(self, success, msg):
self.__success = success
self.__msg = msg
def judge(self):
if self.__success and self.__msg:
return True
else:
return False
if __name__ == "__main__":
print(SuccessJudge(True,True).judge())
2定义测试结果结构体result
class Result:
def __init__(self):
self.__success = False
self.__msg = ""
self.__data = {}
@property
def json(self):
return {"success": self.__success, "msg": self.__msg, "data": self.__data}
def setResult(self, *, success, msg=None, data=None):
self.success = success
if not msg is None:
self.msg = msg
if not data is None:
self.data = data
@property
def success(self):
return self.__success
@success.setter
def success(self, value):
self.__success = value
3接口键正确interfaceUtility
判断key是否正确,先判断是否存在,然后判断key的值value
4文件路径设定fileUtility
保存数据,读取全部文件内容
5基类interfaceBase
初始化地址,参数,方法;处理请求的Url,返回状态码
6初始化接口类(产品详情,产品类型,城市列表,旅游详情,评论,推荐,线下零售,价格日历,满意度,签证)
## 四Test
1定义接口地址变量(参数productId,productType,bookCode,poiId),发送Url,获取返回结果
2data校验,校验是否为空,json格式,字典套字典的数据呈现,校验数据(字段)不为空且为正确的内容
3定义一个类继承unittest.testcase,每一接口都定义一个test_方法,
@ddt
class test(unittest.TestCase):
def setUp(self):
print("")
@data(*ProductSet["data"])
def test_groupinfo(self,value):
res = InterfaceTestCaseResult(testcasename='校验pc跟团产品详情页基本信息')
res.startTimer()
vs = Groupgetinfo(Group)
#print(vs) rs=vs.status(ProductSet["data"][0]['bookCityCode'],ProductSet["data"][0]['ProductID'])
# print(ProductSet["data"][0]['ProductID'], ProductSet["data"][0]['bookCityCode'])
#print(rs)
res.stopTimer()
res.success = rs['success']
res.msg = rs['msg']
res.data = rs['data']
# FileUtility.write(mode="a+", Data=res.toString())
self.assertTrue(res.success)
self.assertTrue(res.msg)
self.assertTrue(res.data)
if __name__ == '__main__':
unittest.main()
## 五report
结果呈现