自动化测试项目实战09:数据驱动

更新时间:2023-07-19 05:20:03 阅读: 评论:0

⾃动化测试项⽬实战09:数据驱动
⼤家好,我是谭叔。
⾃动化测试项⽬实战,已接近尾声,我再来⼀次灵魂拷问:先前的内容练得如何?有遇到困难吗?
如果有困难和问题,可在留⾔区聊聊。
本期,聊聊数据驱动。
什么是数据驱动?
⾸先,数据驱动是⼀个⼤概念。细分下来,应该聊——什么是⾃动化测试的数据驱动。
同理,我们从功能测试理解。
在写功能测试⽤例时,你是否会将测试数据与测试⽤例分开?
举个例⼦,登录操作⼀般分为输⼊⽤户名、输⼊密码、点击登录按钮三步,但是⽤户名和密码的数据组合却有很多种。
该例中,前者是测试⽤例,后者是测试数据——不管做功能测试还是做测试回归,只需要修改测试数据(⽤户名和密码的数据),⽽⽆需修改测试⽤例本⾝(登录的流程)。
论及数据驱动,你可以简单的理解为:相同的测试⽤例,每次使⽤不同的测试数据。
将测试数据与测试⽤例分开,可以降低测试⽤例的维护成本,特别是在接⼝测试中,你可以将所有信息,如输⼊、输出、预期结果,都以适当的形式记录为数据集,执⾏测试时,只需要修改数据集,⽽⽆需修改测试⽤例。
以本⾃动化实战项⽬为例,打开接⼝⾃动化测试⽤例:
test_add_department_003、test_add_department_004、test_add_department_005⽤例,均是字段空值校验。
这类场景,适合使⽤数据驱动。
如何实现数据驱动?
unittest不⽀持数据驱动,⼀般需要借助第三⽅ddt库实现。
⼀、安装ddt
pip3 install ddt -i /simple/ --trusted-host
⼆、创建数据集
在testca⽬录下,新建⼀个data⽬录,再创建DepartmentData.py⽂件,⽤于存放测试数据。
为统⼀维护,我们将新增学院⽤例中的数据全部抽离出来,形成ADD_DATA数据集。
# !/usr/bin/python
# -*- coding:utf-8 -*-
# res_key未实现JSON分级分类解析,你可以⾃⼰尝试实现
ADD_DATA ={
交换机怎么用"test_add_department_001":{
"req_data":{"data":[{"dep_id":"T01","dep_name":"Test学院","master_name":"Test-Master","slogan":"Here is Slogan"}]},
"res_key":"already_exist",
"res_value":0},
"test_add_department_002":{
"req_data":{"data":[{"dep_id":"T01","dep_name":"Test学院","master_name":"Test-Master","slogan":"Here is Slogan"}]},
"res_key":"already_exist",
"res_value":1},
"test_add_department_003":{
"req_data":{"data":[{"dep_id":"","dep_name":"dep_id为空学院","master_name":"dep_id为空Master","slogan":"Here is dep_id为空"}]}, "res_key":"dep_id",
"res_value":"该字段不能为空。"},
"test_add_department_004":{
"req_data":{"data":[{"dep_id":"T02","dep_name":"","master_name":"dep_name为空Master","slogan":"Here is dep_name为空"}]}, "res_key":"dep_name",白眼球充血是什么原因
"res_value":"该字段不能为空。"},
"test_add_department_005":{
"req_data":{"data":[{"dep_id":"T02","dep_name":"T02学院","master_name":"","slogan":"Here is master_name为空"}]},
"res_key":"master_name",
"res_value":"该字段不能为空。"},
"test_add_department_006":{
"req_data":{"data":[{"dep_id":"T02","dep_name":"T02学院","master_name":"T02Master","slogan":""}]},
"res_key":"already_exist",
"res_value":0},
}
三、修改⽤例
修改test_add_department_001⽤例:
1. 装饰ddt的data和unpack
2. 增加⼊参
3. 修改请求数据
4. 修改响应判断
tips:ddt可以加载列表,字典、元组等python数据格式,也可以通过file_data加载json/txt/yaml等数据⽂件。
本篇采⽤加载字典的⽅式实现。
高中数学基本公式from stca.data.DepartmentData import ADD_DATA
from ddt import ddt, data, unpack
...
@data(ADD_DATA['test_add_department_001'])
@unpack
@write_ca_log()
def test_add_department_001(lf, req_data, res_key, res_value):
"""新增T01学院"""
result = ETReq.post(url=ETConfig.URL,
data=json.dumps(req_data))
result = json.)
lf.asrtEqual(result[res_key]['count'], res_value)
...
如上,是⼀个简单的测试驱动模型。
四、新增⽤例
打开⾃动化测试⽤例,尝试⽤dep_id/dep_name/master_name三条数据驱动test_add_department_001⽤例。
...
@data(ADD_DATA['test_add_department_003'], ADD_DATA['test_add_department_004'], ADD_DATA['test_add_department_005']) @unpack
@write_ca_log()
def test_add_department_003(lf, req_data, res_key, res_value):
"""为空校验-dep_id/dep_name/master_name为空校验"""
result = ETReq.post(url=ETConfig.URL,
data=json.dumps(req_data))
# 判断请求结果护美邪医
result = json.)
lf.asrtEqual(result[res_key][0], res_value)
...
完整代码如下:
# !/usr/bin/python
# -*- coding:utf-8 -*-+兔宝宝提莫
from config.ProjectConfig import ETConfig
from db_funcs import init_db
from HttpReq import ETReq
from wrapers import skip_related_ca,write_ca_log
from stca.data.DepartmentData import ADD_DATA
from ddt import ddt, data, unpack
import unittest
import json
@ddt
class AddDepartment(unittest.TestCa):
@classmethod
def tUpClass(cls):
init_db()
@data(ADD_DATA['test_add_department_001'])
@unpack
@write_ca_log()
def test_add_department_001(lf, req_data, res_key, res_value):
"""新增T01学院"""
result = ETReq.post(url=ETConfig.URL,
谅解协议书范本
data=json.dumps(req_data))
result = json.)
lf.asrtEqual(result[res_key]['count'], res_value)# res_key未实现JSON分级分类解析,你可以⾃⼰尝试实现
@data(ADD_DATA['test_add_department_002'])
@unpack
@write_ca_log()
@skip_related_ca('test_add_department_001')
def test_add_department_002(lf, req_data, res_key, res_value):
"""重复新增T01学院"""
result = ETReq.post(url=ETConfig.URL,
data=json.dumps(req_data))
# 判断请求结果
result = json.)
lf.asrtEqual(result[res_key]['count'], res_value)
@data(ADD_DATA['test_add_department_003'], ADD_DATA['test_add_department_004'], ADD_DATA['test_add_department_005']) @unpack
@write_ca_log()
def test_add_department_003(lf, req_data, res_key, res_value):
"""为空校验-dep_id/dep_name/master_name为空校验"""
result = ETReq.post(url=ETConfig.URL,
data=json.dumps(req_data))
data=json.dumps(req_data))
# 判断请求结果
result = json.)
lf.asrtEqual(result[res_key][0], res_value)
@data(ADD_DATA['test_add_department_006'])
@unpack
@write_ca_log()
def test_add_department_006(lf, req_data, res_key, res_value):
李逢吉
"""为空校验-slogan为空校验"""
result = ETReq.post(url=ETConfig.URL,香港胃药
data=json.dumps(req_data))
result = json.)
lf.asrtEqual(result[res_key]['count'], res_value)
if __name__ =='__main__':
# 构造测试
suite = unittest.TestSuite()
suite.addTest(AddDepartment("test_add_department_001"))
suite.addTest(AddDepartment("test_add_department_002"))
suite.addTest(AddDepartment("test_add_department_003"))
suite.addTest(AddDepartment("test_add_department_006"))
# 本地测试⽤,可以在控制台看到⽇志
runner = unittest.TextTestRunner()
test_result = runner.run(suite)
最后,运⾏AddDepartment⽤例类,在控制台可以看到⼀共执⾏了6条⽤例。
再去查查⽇志,test_add_department_003执⾏了三次,达到了数据驱动的⽬的——将测试⽤例和测试数据分离开,执⾏测试时,只需要修改数据集,⽽⽆需修改测试⽤例。

本文发布于:2023-07-19 05:20:03,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1087335.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   测试   驱动   修改   需要
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图