-
- aydApiTest ,基于python3+requests+unnittest+yaml+ddt封装的接口自动化测试框架
-
-
- 1.调整邮件样式显示.
-
- 1.用例组织依据项目进行管理.
- 2.邮件模块逻辑调整,新增邮件统计结果.
- 3.优化部分代码逻辑.
-
- 1.修复一些已知问题.
-
- 1.修复关联数据无法保存数据时的问题.
- 2.完善数据校验逻辑,修复原有的校验逻辑问题.
- 3.调整yaml数据格式,新增options选项管理额外的请求状态数据.
-
- 1.修复返回数据为页面时,报告显示的bug.
- 2.修复数据校验逻辑的bug.
-
- 1.修复关联数据的问题.
- 2.修复校验数据的问题.
-
- 1.新增mongodb、redis数据库常用操作封装.
- 2.新增http其他请求封装如put、delete、patch等.
- 3.修改数据关联逻辑实现.
-
- 1.新增mysq数据库操作封装.
- 2.新增数据校验逻辑.
-
- 1.新增单个接口过滤的skip.
- 2.修改Beautifulreport源码,调整报告输出增加请求体、响应体、caseid、case_desc等详细信息.
- 3.用例运行响应时间精确到ms.
- 4.简化yaml,抽取case公共数据.
- 5.优化日志输出格式.
- 6.yaml增加skip过滤单个用例功能.
- 7.调整关联逻辑.
-
- 1.构建框架基本结构 python+requests+unittest+yaml+ddt.
- 2.完成demo用例输出.
-
-
- 灵活配置:支持以配置文件的方式管理配置,如日志配置与email配置等
- 测试输出:每次运行结果生成实时运行记录,包含测试详细报告与运行时日志
- 邮件支持:支持基于smtp的方式发送email
- 兼容性强:基于requests模块进行测试,并集成yaml与ddt进行数据驱动
- 扩展性强:基于python3开发,方便后续对框架功能的扩展
-
- /conf : 配置文件目录,包含构建配置、邮件配置、日志配置等(默认使用conf.ini、logging.conf)
- /data : 数据文件目录,包括用例数据管理文件夹caseData、公共数据管理文件夹pubData等
- /log : 运行时日志目录
- /report : 测试报告目录
- /src : 源码管理目录,包含基础类、工具类、公共类、用例类等
- start.py : 框架执行入口
- beautifaulreport : 生成html报告,基于beautifaulreport.py修改
- README.MD : 文档说明
-
- python3.6+
-
- unittest
- requests 2.18.4+
- pyyaml 3.13+
- jsonpath_rw 1.4.0+
- ddt 1.2.0+
- configparser
- BeautifulReport
- pymysql 0.8.0+
- pymongo 3.7.1+
- redis 2.10.6+
-
-
op_mysql = OperMysql() op_mysql.connect(MYSQL_HOST, MYSQL_PORT, MYSQL_USER, MYSQL_PWD, MYSQL_DB) data = op_mysql.runsql(SQL, COUNT) print(data) op_mysql.close()
-
op_mongo = OperMongod() op_mongo.connect(MONGOD_HOST, MONGOD_PORT, db_name=MONGOD_DB, collection_name=MONGOD_COL, username=MONGOD_USER, password=MONGOD_PWD) data = op_mongo.get_data() print(data) # type list print(len(data)) # count data,default 10 op_mongo.close()
-
op_redis = OperRedis() op_redis.connect(host=REDIS_HOST, port=REDIS_PORT, db=DB, password=PASSWORD) print(op_redis.get_keys(100)) # type list,default length 10 print(op_redis.get_data('test:1')) # get value
-
-
-
-
case_id: getGuest_1 # 建议用例命令方式: ${ApiName}_${ID} desc: "查询成功" request_data: eid: 5 relyDataExport: # 关联输出,即该接口响应返回被其他接口关联字段 - {"relyKey": "phone", "keepKey": "MyPhone", "datatype": "body"} # relyKey:响应中待关联的字段名,keepKey:保存字段名 - {"relyKey": "Content-Type", "keepKey": "Content-Type", "datatype": "header"} # datatype:响应中获取关联数据的位置,cookie/header/body validators: - {"check": "status", "expect": 200} # validators data in response is json,default # - {"expect": \"status\":200} # validators data in response is text options: # skip: 1 # if value is 1,skip case datacheck : 1 # if value is 1,need datacheck # toJsonData: 0 # if value is 1,request data to json
-
case_id: getGuest_4 desc: "eid为空查询phone" request_data: phone: 13700000004 validators: - {"check": "status", "expect": 10021} - {"check": "message", "expect": "eid cannot be empty"} relyDataImport: # 关联引入,即该接口运行所需的关联字段设置 - {"relyDataSrc": "phone", "relyDataDes": "MyPhone", "datatype": "body"} # relyDataSrc:关联的字段,relyDataDes:被关联引用的字段 - {"relyDataSrc": "phone", "relyDataDes": "MyPhone", "datatype": "cookie"} # datatype: 关联数据引入处,body|header|cookie - {"relyDataSrc": "phone", "relyDataDes": "MyPhone", "datatype": "header"}
-
-
-
def test_get_guest(self, **kw): try: self.start(url=url,...., **kw) except DataCheck: print(1) try: api_resp = self.get_resp() # type dict,获取api响应数据 # 获取数据库返回数据 ... db_resp=.... ... if len(db_resp) == 0: raise DbNoneDataException # 对比api与db返回数据 if api_resp.get('E_testdata'): pass self.logger.debug("数据校验: 通过!") else: raise ApiNoneDataException except DbNoneDataException: self.logger.debug("数据校验 :失败,数据库返回数据为空!") raise except ApiNoneDataException: self.logger.debug("数据校验 :失败,API返回数据为空!") raise except Exception as e: self.logger.debug("数据校验 :失败!") self.logger.debug(e)
-
-