开启左侧

Python+pytest+allure+log+yaml+mysql+钉钉企微告诉接口自动化框架

[复制链接]
在线会员 5LHJF5 发表于 2022-12-30 15:16:29 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
框架介绍
原框架主要是鉴于 Python + pytest + allure + log + yaml + mysql + redis + 钉钉报告 + Jenkins 完毕的交心主动化框架。
git地点: https://gitee.com/yu_xiao_qi/pytest-auto-api2
Python+pytest+allure+log+yaml+mysql+钉钉企微报告交心主动化框架-1.png


媒介
公司突然请求您干主动化,可是不代码根底没有明白如何干?大概有主动化根底,可是没有明白怎样体系性的干主动化, 搁正在yaml文献中保护,没有明白怎样处置多营业依靠的逻辑?
那末那里 Gitte 中启源的主动化框架,将为您处置那些成就。 框架主要使用 python 语言编辑,分离 pytest中止 两次开辟,用户仅需要正在 yaml 文献中编辑尝试用例, 编辑胜利以后,会主动天生 pytest 的代码,整根底代码小利剑,也能够操纵。
原框架撑持多营业交心依靠,多历程施行,mysql 数据库断行战 交心照应断行,而且用例间接正在yaml文献中保护,无需编辑营业代码, 交心pytest框架天生allure陈述,而且收收 企业微疑报告/ 钉钉报告/ 邮箱报告/ 飞书籍报告,活络设置。
完毕功用
尝试数据断绝, 完毕数据启动
撑持多交心数据依靠: 如A交心需要共时依靠B、C交心的照应数据动作参数
数据库断行: 间接正在尝试用例中写进盘问的sql便可断行,无需编辑代码
静态 多断行: 如交心需要共时校验照应数据战sql校验,撑持多场景断行
主动天生用例代码: 尝试职员正在yaml文献中挖写佳尝试用例,顺序 能够间接天生用例代码,杂小利剑也能使用
代办署理录造: 撑持代办署理录造,天生yaml格局的尝试用例
统计交心的运行时少: 拓展功用,订造启闭,能够决定可否需要使用
日记模块: 挨印每一个交心的日记疑息,异常订造了启闭,能够决定可否需要挨印日记
钉钉、企业微疑报告: 撑持多种报告场景,施行胜利以后,可挑选收收钉钉、大概企业微疑、邮箱报告
自界说拓展字段: 如用例中需要天生的随机数据,可间接挪用
多线程施行
目次构造
├── Cache //寄存 慢存文献
├── co妹妹on // 设置
│ ├── conf.yaml // 大众设置
│ ├── setting.py // 情况路子寄存地区
├── data // 尝试用例数据
├── Enums // 列举层,用于寄存名目中所需的列举
├── File // 上传文献交心所需的文献寄存地区
├── log // 日记层
├── report // 尝试陈述层
├── test_case // 尝试用例代码
├── utils // 东西类
│ └── assertUtils // 断行
│ └── assertUtils.py
│ └── cacheUtils // 慢存处置模块
│ └── cacheControl.py
│ └── redisControl.py
│ └── logUtils // 日记处置模块
│ └── logControl.py
│ └── logDecoratrol.py // 日记粉饰器
│ └── runTimeDecoratrol.py // 统计用例施行时少粉饰器
│ └── mysqlUtils // 数据库模块
│ └── get_sql_data.py
│ └── mysqlControl.py
│ └── noticUtils //通知 模块
│ └── dingtalkControl.py // 钉钉报告
│ └── feishuControl.py // 飞书籍报告
│ └── sendmailControl.py // 邮箱报告
│ └── weChatSendControl.py // 企业微疑报告
│ └── otherUtils // 其余东西类
│ └── allureDate // allure启拆
│ └── allure_report_data.py // allure陈述数据洗濯
│ └── allure_tools.py // allure办法 启拆
│ └── error_case_excel.py // 汇集allure非常用例,天生excel尝试陈述
│ └── localIpControl.py // 获得当地IP
│ └── threadControl.py // 按时器类
│ └── readFilesUtils // 文献操纵
│ └── caseAutomaticControl.py // 主动天生尝试代码
│ └── clean_files.py // 清理文献
│ └── excelControl.py // 读写excel
│ └── get_all_files_path.py // 获得统统文献路子
│ └── get_yaml_data_analysis.py // yaml用例数据洗濯
│ └── regularControl.py // 邪则
│ └── yamlControl.py // yaml文献读写
│ └── recordingUtils // 代办署理录造
│ └── mitmproxyContorl.py
│ └── requestsUtils
│ └── dependentCase.py // 数据依靠处置
│ └── requestControl.py // 恳求启拆
│ └── timeUtils
├── Readme.md // help
├── pytest.ini
├── run.py // 运行进口
依靠库
allure-pytest2.9.45
allure-python-co妹妹ons2.9.45
atomicwrites1.4.0
attrs21.2.0
certifi2021.10.8
cffi1.15.0
charset-normalizer2.0.7
colorama0.4.4
colorlog6.6.0
cryptography36.0.0
DingtalkChatbot1.5.3
execnet1.9.0
Faker9.8.3
idna3.3
iniconfig1.1.1
jsonpath0.82
packaging21.3
pluggy1.0.0
py1.11.0
pycparser2.21
PyMySQL1.0.2
pyOpenSSL21.0.0
pyparsing3.0.6
pytest6.2.5
pytest-forked1.3.0
pytest-xdist2.4.0
python-dateutil2.8.2
PyYAML6.0
requests2.26.0
six1.16.0
text-unidecode1.3
toml0.10.2
urllib31.26.7
xlrd2.0.1
xlutils2.0.0
xlwt1.3.0
装置 学程
起首,施行原框架以后,需要拆修佳 python、jdk、 allure情况
拆修python学程:http://c.biancheng.net/view/4161.html
拆修jdk情况:https://www.cnblogs.com/zll-wyf/p/15095664.html
装置allure:https://blog.csdn.net/m0_49225959/article/details/117194318
如上情况如皆拆修佳,则装置原框架的统统第三圆库依靠,施行以下号令
pip3 install -r requirements.txt

Python+pytest+allure+log+yaml+mysql+钉钉企微报告交心主动化框架-2.png


假设正在装置过程当中呈现以下 Could not find a version类似 的非常,不必 担忧,可以是因为您装置的python情况 版原战尔没有不合招致的,间接 pip install 库称呼,没有指定版原装置就能够了。
如上圆截图道不找到 asgiref==3.5.1,报错的意义是,不找到3.5.1那个版原,那末间接掌握台输出 pip3 install asgiref中止 装置便可
交心文档
那里十分感谢一名安卓的朋友,给尔举荐了启源的交心文献,框架中会针对于启源交心中的登录、小我私家疑息、珍藏(新删、检察、改正、简略)等功用,编辑成果主动化案例 下圆是交心文档地点,各人能够自止检察(因为启源的交心,里面有些逻辑性的功用,如改正被简略的网址交心并无过量的干鉴别,因而 用例中只写了一点儿根底的场景,仅供各人参照。) https://wanandroid.com/blog/show/2
怎样创立用例
创立用例步调
一、正在data文献夹下圆创立相干的yaml用例
二、写完以后,需要施行 utils\readFilesUtils\caseAutomaticControl.py 那个文献,天生主动化代码
三、施行caseAutomaticControl.py文献以后,会发明,正在test_case层新删该条用例的对于应代码,可间接施行该用例调试
四、当统统交心皆编辑佳以后,能够间接运行run.py主法式,施行统统主动化交心
上面咱们去瞅一下,怎样创立用例
Python+pytest+allure+log+yaml+mysql+钉钉企微报告交心主动化框架-3.png


上圆截图,即是一个用例中需要保护的相干字段,上面尔会对于每一个字段的感化,干出注释。
Python+pytest+allure+log+yaml+mysql+钉钉企微报告交心主动化框架-4.jpg

怎样收收get恳求
上圆理解了用例的数据构造以后,上面咱们开端编辑第一个get恳求方法的交心。 起首,开端编辑名目以后,咱们正在 conf.yaml 中设置名目的域名
Python+pytest+allure+log+yaml+mysql+钉钉企微报告交心主动化框架-5.png


域名设置佳以后,咱们去编辑尝试用例,正在 data 文献上面,创立一个称呼为 collect_tool_list.yaml 的用例文献,恳求/lg/collect/usertools/json那个珍藏网址列表交心,统统交心的具体疑息,能够正在交心文档中检察,下圆没有正在干赘述
交心文档:https://wanandroid.com/blog/show/2
  1. # 大众参数
  2. case_co妹妹on:
  3.   allureEpic: 开辟仄台交心
  4.   allureFeature:珍藏 模块
  5.   allureStory:珍藏 网址列表交心
  6. collect_tool_list_01:
  7.     host: ${{host()}}
  8.     url:/lg/collect/usertools/json
  9.     method: GET
  10.     detail:检查 珍藏网址列表交心
  11.     headers:
  12.       Content-Type: multipart/form-data;# 那里cookie的值,写的是存进慢存的称呼
  13.       cookie: login_cookie
  14.     # 恳求的数据,是 params 仍是 json、大概file、data
  15.     requestType: data
  16.     # 可否施行,空大概 true 城市施行
  17.     is_run:
  18.     data:
  19.       pageNum:1
  20.       pageSize:10# 可否有依靠营业,为空大概false则暗示不
  21.     dependence_case:False# 依靠的数据
  22.     dependence_case_data:assert:# 断行交心形状码
  23.       errorCode:
  24.         jsonpath: $.errorCode
  25.         type:==
  26.         value:0
  27.         AssertType:
  28.     sql:
复造代码
get恳求咱们 requestType 写的是 params ,如许收收恳求时,咱们会将恳求参数拼交中url中,终极像效劳端收收恳求的地点格局会为:
如: ${{host()}}/lg/collect/usertools/json?pageNum=1&pageSize=10
怎样收收post恳求
  1. # 大众参数
  2. case_co妹妹on:
  3.   allureEpic: 开辟仄台交心
  4.   allureFeature:珍藏 模块
  5.   allureStory:珍藏 网址交心
  6. collect_addtool_01:
  7.     host: ${{host()}}
  8.     url:/lg/collect/addtool/json
  9.     method: POST
  10.     detail: 新删珍藏网址交心
  11.     headers:
  12.       Content-Type: multipart/form-data;# 那里cookie的值,写的是存进慢存的称呼
  13.       cookie: login_cookie
  14.     # 恳求的数据,是 params 仍是 json、大概file、data
  15.     requestType: data
  16.     # 可否施行,空大概 true 城市施行
  17.     is_run:
  18.     data:
  19.       name: 主动化天生珍藏网址${{random_int()}}
  20.       link: https://gitee.com/yu_xiao_qi/pytest-auto-api2
  21.     # 可否有依靠营业,为空大概false则暗示不
  22.     dependence_case:False# 依靠的数据
  23.     dependence_case_data:assert:# 断行交心形状码
  24.       errorCode:
  25.         jsonpath: $.errorCode
  26.         type:==
  27.         value:0
  28.         AssertType:
  29.     sql:
复造代码
那里post恳求,咱们需要恳求的数据格局是json格局的,那末requestType 则挖写为json格局。 包罗 PUT/DELETE/HEAD 恳求的数据格局皆是一致的,唯一差别的即是需要设置 reuqestType,假设 需要恳求的参数是json格局,则requestType咱们便挖写json,假设是url拼交的方法,咱们便挖写 params
怎样尝试上传文献交心
起首,咱们将统统需要尝试的文献,局部皆搁正在 files 文献夹中
Python+pytest+allure+log+yaml+mysql+钉钉企微报告交心主动化框架-6.png

  1. requestType:file# 可否施行,空大概 true 城市施行
  2. is_run:
  3. data:file:
  4.      file_name: 排进火体名.png
复造代码
正在yaml文献中,咱们需要留神二个处所,主要是用例中的requestType、战 filename 字段: 一、requestType: 上传文献,咱们需要变动成 file 二、file:假设 是文献上传的话,便没有需要要有file,而后咱们上传的文献写正在file下圆 三、file_name: 起首,那个file_name是咱们公司交心界说的上传文献的参数,排进火体名.png 那个是咱们搁正在Files那个文献夹下圆的文献称呼顺序 正在施行的时候,会鉴别假设您的requestType为 file的时候,则会来施行file下圆的参数,而后与到文献称呼间接来施行用例
上传文献交心,即需要上传文献,又需要上传其余参数
  1. requestType:file# 可否施行,空大概 true 城市施行
  2. is_run:
  3. data:file:
  4.      file_name: 排进火体名.png
  5.   data:
  6.      is_upload:0
  7.   params:
  8.      collect: false
复造代码
上圆的那个案例,恳求参数即上传了文献,又上传了其余参数
一、file: 那里下圆上传的是文献参数
二、data: 那个data下圆是该交心,除文献参数,借需要上传其余的参数,那个参数会以json的方法传给效劳端(假设不其余参数,能够不消写那个)
三、params: 那个是除文献参数之外的,上传的其余参数,那个参数是拼交正在url前方的

Python+pytest+allure+log+yaml+mysql+钉钉企微报告交心主动化框架-7.png


为了便利各人理解,上圆将该参数,以postman的方法上传
多营业逻辑,怎样编辑尝试用例
多营业那一齐,咱们拿个简朴的例子举例,好比登录场景,正在登岸以前,咱们需要先获得到考证码。
Python+pytest+allure+log+yaml+mysql+钉钉企微报告交心主动化框架-8.png


Python+pytest+allure+log+yaml+mysql+钉钉企微报告交心主动化框架-9.png


起首,咱们先创立一个 get_send_sms_code.yaml 的文献,编辑一条收收考证码的用例
  1. # 大众参数case_co妹妹on:allureEpic: 盲盒APP
  2.   allureFeature: 登录模块
  3.   allureStory: 获得登录考证码
  4. send_sms_code_01:host: ${{host()}}url: /mobile/sendSmsCode
  5.     method: POST
  6.     detail: 一般获得登录考证码
  7.     headers:appId:'23132'masterAppId: masterAppId
  8.       Content-Type: application/json;charset=UTF-8# 恳求的数据,是 params 仍是 json、大概filerequestType: json
  9.     # 可否施行,空大概 true 城市施行is_run:data:phoneNumber:"180奸淫*9278"# 可否有依靠营业,为空大概false则暗示不dependence_case:False# 依靠的数据dependence_case_data:assert:code:jsonpath: $.code
  10.         type: ==
  11.         value:'00000'AssertType:success:jsonpath: $.success
  12.         type: ==
  13.         value:trueAssertType:sql:
复造代码
编辑佳以后,咱们正在创立一个 login.yaml 文献
  1. # 大众参数case_co妹妹on:allureEpic: 盲盒APP
  2.   allureFeature: 登录模块
  3.   allureStory: 登录
  4. login_02:host: ${{host()}}url: /login/phone
  5.     method: POST
  6.     detail: 登录输出毛病的考证码
  7.     headers:appId:'23132'masterAppId: masterAppId
  8.       Content-Type: application/json;charset=UTF-8# 恳求的数据,是 params 仍是 json、大概filerequestType: json
  9.     # 可否施行,空大概 true 城市施行is_run:data:phoneNumber:18014909278code:# 可否有依靠营业,为空大概false则暗示不dependence_case:True# 依靠的数据dependence_case_data:-case_id: send_sms_code_01
  10.         dependent_data:-dependent_type: response
  11.             jsonpath: $.code
  12.             replace_key: $.data.code
  13.     assert:code:jsonpath: $.code
  14.         type: ==
  15.         value:'00000'AssertType:sql:
复造代码
此中处置多营业的中心地区,主要正在那里:
  1. dependence_case:True# 依靠的数据dependence_case_data:-case_id: send_sms_code_01
  2.         dependent_data:-dependent_type: response
  3.             jsonpath: $.code
  4.             replace_key: $.data.code
复造代码
起首,咱们 dependence_case 需要树立成 True,而且鄙人里的 dependence_case_data 中设想相干依靠的数据。
case_id:上圆场景中,咱们登录需要先获得考证码,因而依靠的case_id 即是收收短疑考证码的 case_id :send_sms_code_01
dependent_type:咱们依靠的是获得短疑考证码交心中的照应实质,因而此次挖写的是 response
jsonpath: 颠末jsonpath 提炼方法,提炼到短疑考证码中的考证码实质
replace_key:拿到考证码以后,咱们将原条用例中的data中的code参数,那末咱们使用jsonpath的方法,截至交流 $.data.code
多营业逻辑,需要依靠统一个交心中的多个数据
  1. dependence_case_data:-case_id: send_sms_code_01
  2.     dependent_data:# 提炼交心照应的code码-dependent_type: response
  3.         jsonpath: $.code
  4.         replace_key: $.data.code
  5.       # 提炼交心照应的accessToken-dependent_type: response
  6.         jsonpath: $.data.accessToken
  7.         #交流 恳求头中的accessTokenreplace_key: $.headers.accessToken   
复造代码
如上圆示例,能够增加多个 dependent_type
多营业逻辑,需要依靠差别交心的数据
假定咱们需要获得 send_sms_code_0一、get_code_01二个交心中的数据,用例格局以下
  1. dependence_case:True# 依靠的数据dependence_case_data:-case_id: send_sms_code_01
  2.     dependent_data:# 提炼交心照应的code码-dependent_type: response
  3.         jsonpath: $.code
  4.         replace_key: $.data.code
  5.   -case_id: get_code_01
  6.     dependent_data:# 提炼交心照应的code码-dependent_type: response
  7.         jsonpath: $.code
  8.         replace_key: $.data.code
复造代码
将依靠的数据间接存进慢存中
根据上圆咱们所写的,现在用到的是 replace_key来对于本来用例中的实质截至交流,固然咱们也供给了能够间接将数据存进慢存中 那里咱们需要用到set_cache的枢纽字。
  1. -case_id: get_code_01
  2.     dependent_data:# 提炼交心照应的code码-dependent_type: response
  3.         jsonpath: $.code
  4.         # 道咱们提炼到的实质间接存进慢存中,set_cache前方界说的值,是咱们慢存的称呼# 称呼能够自界说, set_cache 战 repalce_key 的办法能够两选一,二种皆撑持set_cache: verify_code
复造代码
将目前用例的恳求值大概照应值存进慢存中
有些小同伴以前有反应过,好比念要干数据库的断行,可是那个字段交心不前去,尔该当如何来干校验呢?顺序 中供给了current_request_set_cache那个枢纽字,能够将目前那条用例的恳求数据或许 照应数据 给间接存进慢存中 以下案例所示:
  1. current_request_set_cache:# 一、response 从照应中提炼实质  二、request从恳求中提炼实质-type: response
  2.     jsonpath: $.data.data.[0].id
  3.     # 自界说的慢存称呼name: test_query_shop_brand_list_02_id
复造代码
恳求用例时参数需要从数据库中提炼
Python+pytest+allure+log+yaml+mysql+钉钉企微报告交心主动化框架-10.png


如上图所示,用例中的 dependent_type 需要挖写成 sqlData。 当您的依靠范例为 sqlData 数据库的数据时,那末下圆便需要再减一个 setup_sql 的参数,下圆挖写需要用到的sql语句
留神case_id: 因为法式设想启事,凡是情况下,咱们联系关系的营业,会收收交心恳求,可是假设咱们依靠的是sql的话, 是没有需要收收恳求的,因而咱们假设是从数据库中提炼数据动作参数的话,咱们case_id 需要写self ,便利法式中来干辨别
  1. ApplyVerifyCode_01:host: ${{host}}url: /api/v1/merchant/apply/verifyCode
  2.     method: GET
  3.     detail: 校验已经考核颠末的供给商脚机号码
  4.     headers:Content-Type: application/json;charset=UTF-8# 恳求的数据,是 params 仍是 json、大概file、datarequestType: params
  5.     # 可否施行,空大概 true 城市施行is_run:data:mobile:18811111111authCode:123456# 可否有依靠营业,为空大概false则暗示不dependence_case:True# 依靠的数据dependence_case_data:-case_id: self
  6.         dependent_data:-dependent_type: sqlData
  7.             jsonpath: $.username
  8.             replace_key: $.data.mobile
  9.     assert:code:jsonpath: $.code
  10.         type: ==
  11.         value:200AssertType:applyId:jsonpath: $.data[0].applyId
  12.         type: ==
  13.         value: $.applyId
  14.         AssertType: SQL
  15.       applyStatus:jsonpath: $.data[0].applyStatus
  16.         type: ==
  17.         value: $.applyStatus
  18.         AssertType: SQL
  19.     sql:- select a.apply_id as applyId, a.to_status as applyStatus, a.sub_biz_type as subBizType, a.operator_name as operatorName, a.operator_user_id as operatorUserId, b.apply_type as applyType from test_obp_midware.apply_operate_log as a inner join test_obp_midware.apply as b on a.apply_id = b.id where b.id = $json($.data[0].applyId)$ order by a.id desc limit 1;
  20.     setup_sql:- SELECT * FROM test_obp_user.user_biz_info where user_id = '300000405'
复造代码
用例中需要依靠登录的token,怎样设想
起首,为了避免重复恳求挪用登录交心,pytest中的 conftest.py 供给了冷减载体制,瞅上圆截图中的代码,咱们需要正在 conftest.py延迟 编辑佳登录的代码。
如上圆代码所示,咱们会先来读与login.yaml文献中的用例,而后施行获得到照应中的token,而后 编辑 Cache(‘work_login_init’).set_caches(token),将token写进慢存中,此中 work_login_init 是慢存称呼。
编辑佳以后,咱们会正在 requestControl.py 文献中,读与慢存中的token,假设该条用例需要依靠token,则间接截至实质交流。
Python+pytest+allure+log+yaml+mysql+钉钉企微报告交心主动化框架-11.png

  1. @pytest.fixture(scope="session", autouse=True)
  2. def work_login_init():
  3.     """
  4.     获得登录的cookie
  5.     :return:
  6.     """
  7.     url = "https://www.wanandroid.com/user/login"
  8.     data = {"username":18800000001,"password":123456}
  9.     headers = {'Content-Type':'application/x-www-form-urlencoded'}# 恳求登录交心
  10.     res = requests.post(url=url, data=data, verify=True, headers=headers).json()
  11.     token = res['response']['token']
  12.     CacheHandler.update_cache(cache_name='work_login_init', value=token)
复造代码
那里正在编辑用例的时候,token 挖写咱们所编辑的慢存称呼便可。
Python+pytest+allure+log+yaml+mysql+钉钉企微报告交心主动化框架-12.png


用例中依靠cookie怎样设想
Python+pytest+allure+log+yaml+mysql+钉钉企微报告交心主动化框架-13.png


起首咱们正在conftest.py中编辑获得cookie的办法
  1. @pytest.fixture(scope="session", autouse=True)
  2. def work_login_init():
  3.     """
  4.     获得登录的cookie
  5.     :return:
  6.     """
  7.     url = "https://www.wanandroid.com/user/login"
  8.     data = {"username":18800000001,"password":123456}
  9.     headers = {'Content-Type':'application/x-www-form-urlencoded'}# 恳求登录交心
  10.     res = requests.post(url=url, data=data, verify=True, headers=headers)
  11.     response_cookie = res.cookies
  12.     cookies = ''
  13.     for k,v in response_cookie.items():
  14.         _cookie = k + "=" + v + ";"
  15.         # 拿到登录的cookie实质,cookie拿到的是字典范例,变换成对于应的格局
  16.         cookies += _cookie
  17.         # 将登录交心中的cookie写进慢存中,此中login_cookie是慢存称呼
  18.         CacheHandler.update_cache(cache_name='login_cookie', value=cookies)
  19. 战token一致,咱们假设用例的恳求头中依靠cookie, cookie中的值,间接写咱们存进慢存中的称呼便可
  20.     headers:Content-Type: multipart/form-data;
  21.       # 那里cookie的值,写的是存进慢存的称呼cookie: $cache{login_cookie}
复造代码
用例中怎样天生随机数据
好比咱们有些特别的场景,可以会涉及到一点儿定造化的数据,屡屡施行数据,需要根据指定例则随机天生。
Python+pytest+allure+log+yaml+mysql+钉钉企微报告交心主动化框架-14.png


如上图所示,咱们用例中的 reason 考核启事前方,需要展示考核确当前时间。那末咱们起首需要启拆一个获得目前时间的办法
Python+pytest+allure+log+yaml+mysql+钉钉企微报告交心主动化框架-15.png


那末咱们便正在 regularControl.py 文献中,编辑 get_time 的办法。编辑佳以后,正在用例中编辑划定规矩以下:
  1. reason: 考核时间${{get_time()}}
复造代码
使用 ${{函数称呼()}}的办法,法式挪用时,会天生目前时间。正在regularControl.py 文献中,尔借启拆了一点儿经常使用的随机数,如随机天生男死姓名、女死姓名、身份证、邮箱、脚机号码之类的,便利各人使用。 如,随机天生邮箱,咱们正在用例中编辑的格局为 ${{get_email}} 。
其余所需随机天生的数据,可正在文献中自止增加。
主动化函数通报参数
起首异常战上圆一致,创立一个随机天生的办法,改办法撑持领受参数
  1. @classmethod
  2. def random_int(cls, min_num,max_num):
  3.     """
  4.     随机天生指定范畴的随机数
  5.     @param min_num: 最小数字
  6.     @param max_num: 最年夜数字
  7.     @return:
  8.     """
  9.     num = random.randint(int(min_num), int(max_num))
  10.     return num
复造代码
正在用例中,假定咱们需要获得一个 1-10之间的随机数,那末咱们间接如许挪用该数据便可
  1. reason:{{random_int(1, 10)}}
复造代码
断行http照应形状码
相信有些小同伴正在干交心尝试的过程当中,有部门交心是不所有照应的,那末正在不照应数据的情况下 咱们便只可颠末 http的形状码来鉴别那条用例可否颠末,咱们能够如许写
  1. assert:status_code:200
复造代码
咱们间接正在assert下圆增加一个 status_code 参数,形状码咱们鉴别其为 200
用例中增加等候时间
法式中能够设定交心恳求以后,等候时少,假定A交心依靠B交心的营业,A交心恳求完时,咱们需要让他等候多少秒钟 再次恳求B交心,如许的话,咱们能够使用sleep枢纽字
  1. sleep:3
复造代码
断行范例
下搁截图中,是统统断行撑持的范例
Python+pytest+allure+log+yaml+mysql+钉钉企微报告交心主动化框架-16.jpg


用例中怎样截至交心断行战数据库断行
假定现在尔需要尝试一个报表统计的数据,该交心前去了任务的处置时少 战处置 数目。功用以下截图所示:
Python+pytest+allure+log+yaml+mysql+钉钉企微报告交心主动化框架-17.png


假定下圆是咱们拿到交心照应的数据实质:
  1. {"code":200,"times":155.91,"counts":9}
复造代码
那个时候,咱们需要鉴别该交心前去的数据可否准确,便需要编辑sql,对于照应实质截至校验。
Python+pytest+allure+log+yaml+mysql+钉钉企微报告交心主动化框架-18.png


因而咱们编辑了如上sql,查出对于应的数据,那末用例中编辑划定规矩以下,下圆咱们别离断行了二个实质,一个是连接心的照应code码截至断行,一个是断行数据库中的数据。
  1. assert:code:jsonpath: $.code
  2.       type: ==
  3.       value:200# 断行交心照应时,能够为空AssertType:do_time:# jsonpath 拿到交心照应的数据jsonpath: $.times
  4.       type: ==
  5.       # sql 查进去的数据,是字典范例的,因而那里是从字段中提炼检察进去的字段value: $.do_time
  6.       # 断行sql的时候,AssertType 的值需要挖写成 SQLAssertType: SQL
  7.    question_counts:jsonpath: $.counts
  8.       type: ==
  9.       # value: $.question_counts
  10.       # 断行sql的时候,AssertType 的值需要挖写成 SQLAssertType: SQL
  11.   sql:- select * from test_goods where shop_id = 515
复造代码
咱们别离对于用例的数据截至解说,起首是照应断行, 编辑划定规矩以下
  1. code:# 颠末jsonpath获得交心照应中的code {"code": 200, "times": 155.91, "counts": 9}jsonpath: $.code
  2.   type: ==
  3.   value:200# 断行交心照应时,能够为空AssertType:
复造代码
上面是对于sql截至断行
  1. question_counts:# 断行交心照应的成就上报数目counts {"code": 200, "times": 155.91, "counts": 9}jsonpath: $.counts
  2.       type: ==
  3.       # 盘问sql,咱们数据库查到的数据是一个字段,数据是如许的:{question_counts: 13, do_time: 1482.70}, 那里咱们颠末 jsonpath获得question_countsvalue: $.question_counts
  4.       # 断行sql的时候,AssertType 的值需要挖写成 SQLAssertType: SQL
  5.   sql:- SELECT round( sum(( UNIX_TIMESTAMP( filing_time )- UNIX_TIMESTAMP( report_time )) / 60 ) / 60, 2 ) AS do_time, count( id ) AS question_counts FROM fl_report_info WHERE state IN ( 1, 3 )
复造代码
有些仔细的小同伴会发明,咱们的sql,是列表范例的。如许便表示那,咱们的sql能够共时编辑多条,如许会对于没有会编辑多表联查的小同伴比力友好,能够截至单表盘问,获得咱们需要的数据。
  1. sql:- select * from users;
  2.   - select * from goods;
复造代码
使用teardown功用,干数据洗濯
凡是情况下,咱们干主动化统统新删的数据,咱们尝试完毕以后,皆需要道那些数据简略,法式中撑持二种写法 一种是间接挪用交心截至数据简略。另一种是间接简略数据库中的数据,倡议使用第一种,间接挪用营业交心简略对于应的数据
一、上面咱们先去瞅瞅第一种简略方法,teardown的功用,因为需要兼容较多的场景,因而使用功用上绝对也会比力庞大 需要小同伴们一个一个来垂垂的理解。
上面为了便利各人关于teardown功用的理解,尔会针对于差别的场景截至举例:
假定现在咱们有一个新删交心,写完以后,咱们需要先挪用盘问交心获得到新删交心的ID,而后再截至简略 那末此时会设想到二个场景,起首施行新删交心ID,而后再拿到照应(那里有个逻辑上的前后干系,盘问交心,是先收收恳求,正在提炼数据) 获得到盘问的ID以后,咱们正在施行简略,简略的话,咱们是间接收收恳求
那末针对于那个场景,咱们便需要有个枢纽字来干辨别,甚么场景下先收收恳求,甚么场景下后收收恳求,上面咱们去瞅一下案例,便利各人理解
  1. teardown:#检查 品牌考核列表,获得品牌的apply_id-case_id: query_apply_list_01
  2.     # 留神那里咱们是先收收恳求,正在拿到自己照应的实质,因而咱们那个字段需要写param_prepareparam_prepare:# 因为是获得自己的照应实质,咱们dependent_type需要写成 self_response-dependent_type: self_response
  3.         # 颠末jsonpath的办法,获得query_apply_list_01那个交心的照应实质jsonpath: $.data.data.[0].applyId
  4.         # 将实质存进慢存,那个是自界说的慢存称呼set_cache: test_brand_apply_initiate_apply_01_applyId
  5.         
  6.         # 撑持共时存多个数据,只会收收一次恳求-dependent_type: self_response
  7.         jsonpath: $.data.data.[0].brandName
  8.         set_cache: test_brand_apply_initiate_apply_01_brandName
  9.    
  10.   # 简略-case_id: delete_01
  11.     # 简略的话,咱们是间接收收恳求的,因而咱们那里写 send_requestsend_request:# 咱们上圆已经拿到了ID,而且将ID存进慢存中,因而那里依靠数据的范例为cache,间接从慢存中提炼-dependent_type: cache
  12.         # 那个是慢存称呼cache_data: test_brand_apply_initiate_apply_01_applyId
  13.         # 颠末relace_key 来交流 delete_01 中的 applyID参数replace_key: $.data.applyId
复造代码
那末有些小同伴会正在念,异常咱们以上圆的交心场景为例,有些小同伴会道,尔公司的新删的交心,有间接前去ID,没有需要挪用盘问交心顺序 中固然也撑持这类场景,咱们只要供这样编辑
  1. -case_id: process_apply_01
  2.   #异常 这样写 send_requestsend_request:# 那里咱们从照应中获得-dependent_type: response
  3.       # 颠末jsonpath的方法,获得照应的实质jsonpath: $.data.id
  4.       # 使用repalce_key截至交流replace_key: $.data.applyId  
复造代码
法式中也撑持从恳求里面获得实质,编辑划定规矩以下
  1. -case_id: process_apply_01
  2.   #异常 这样写 send_requestsend_request:# 那里咱们从照应中获得-dependent_type: request
  3.       # 颠末jsonpath的方法,获得恳求的实质jsonpath: $.data.id
  4.       # 使用repalce_key截至交流replace_key: $.data.applyId
复造代码
主动天生test_case层代码
小同伴们正在编辑佳 yaml 用例以后,能够间接施行 caseAutomaticControl.py ,会跟您设想的尝试用例,天生对于应的代码。
Python+pytest+allure+log+yaml+mysql+钉钉企微报告交心主动化框架-19.png


收收钉钉报告报告
Python+pytest+allure+log+yaml+mysql+钉钉企微报告交心主动化框架-20.png


收收企业微疑报告
Python+pytest+allure+log+yaml+mysql+钉钉企微报告交心主动化框架-21.png


日记挨印粉饰器
Python+pytest+allure+log+yaml+mysql+钉钉企微报告交心主动化框架-22.png


正在requestControl.py中,尔零丁启拆了一个日记粉饰器,需要的小同伴能够不消窜改代码,间接使用,假设没有需要,间接正文,大概改为False。掌握台将没有会有日记输出
统计用例运行时少
Python+pytest+allure+log+yaml+mysql+钉钉企微报告交心主动化框架-23.png


异常,那里启拆了一个统计用例运行时少的粉饰器,使用改粉饰器前,需要先截至导包
  1. from utils.logUtils.runTimeDecoratorl import execution_duration
复造代码
导进以后,挪用改粉饰器,粉饰器中挖写的用例施行时少,以毫秒为单元,如那里树立的2000ms,那末假设该用例施行年夜于2000ms,则会输出一条告警日记。
  1. @execution_duration(2000)
复造代码
天生allure陈述
咱们间接运行主法式 run.py ,运行完毕以后,就能够天生斑斓的allure陈述啦~
Python+pytest+allure+log+yaml+mysql+钉钉企微报告交心主动化框架-24.png


Python+pytest+allure+log+yaml+mysql+钉钉企微报告交心主动化框架-25.png


其余
原框架为2.0升级版原,升级以后的功用,现在根本上皆是正在yaml中保护用例,无需尝试职员编辑代码, 战 1.0版原的区分正在于,1.0版原借需要尝试职员脚动编辑多营业逻辑的代码,需要有必然根底编码的才气
可是1.0版原,异常也能够主动天生代码,yaml中保护数据,对于绝对简朴,假设偏偏于yaml简朴保护的同学,能够切换检察1.0分收 下圆是1.0分收的操纵文档:面尔检察
以上即是全部框架的使用分析,那个框架属于小我私家专科时间开辟,各人假设正在使用中碰到甚么成就,大概有相干倡议,能够随时反应给尔, _框架实质会跟着各人的反应,连续革新!邮箱地点:1602343211@qq.com
假设以为框架有辅佐到您,省事珍藏一下哦~~感谢。
您需要登录后才可以回帖 登录 | 立即注册 qq_login

本版积分规则

发布主题
阅读排行更多+
用专业创造成效
400-778-7781
周一至周五 9:00-18:00
意见反馈:server@mailiao.group
紧急联系:181-67184787
ftqrcode

扫一扫关注我们

Powered by 职贝云数A新零售门户 X3.5© 2004-2025 职贝云数 Inc.( 蜀ICP备2024104722号 )