场景:有环境变量需要替换到用例数据中去,

解决的问题:多条接口用例的通用配置和token之类的参数要写在每条测试用例中,替换不方便。

场景一:字符串中只有一个变量需要替换

原始数据:(数据来源:execl中读取,或者数据库中读取出来的,都可以)

params= '{"_ver":"3.18.1","_ct":"101","token":${token}'

在进行接口请求前,需要把数据中的变量${token} ,替换成环境变量,${} 只是一个特殊的标识符,目的的方便使用正则表达式匹配,换成你自己喜欢的都可以

在此处使用python的re模块的re.search和re.sub ,不清楚的可以在菜鸟站上搜到教程

Python3 正则表达式 | 菜鸟教程

下面是实现的代码

思路:

1、写出正则匹配式

2、取出字符串中匹配成功的变量

3、取出匹配到的值,也就是需要替换掉的变量

4、从环境变量中获取要变量值

5、使用re.sub进行替换。

sub的四个属性代表的意思:正则匹配式,要替换变量的字符串或者函数,要被查找替换的原始字符串,该模式匹配成功后的最大替换次数(默认为替换所有匹配到的)

import re
import Config# 定义一个字符串,里面有一个变量
params= '{"_ver":"3.18.1","_ct":"101","token":${token},"order_id":${order_id}}'# 写出正则匹配式
ru = r'\${(.*?)}'# 进行正则匹配
while re.search(ru,params):# 取出字符串中匹配成功的变量res = re.search(ru, params)# 取出匹配到的值,也就是需要替换掉的变量key = res.group(1)print(key)# 从环境变量中获取要变量值# value = Config.tokenvalue = getattr(Config,key)print(value)# 进行替换,正则匹配式,要替换变量的字符串或者函数,要被查找替换的原始字符串,该模式匹配成功后的最大替换次数(默认为替换所有匹配到的),params = re.sub(ru,value,params,1)print(params)

运行的结果:

场景二:一个字符串中有多个变量需要替换

原始数据:

params= '{"_ver":"3.18.1","_ct":"101","token":${token},"order_id":${order_id}}'

思路:

1、写出正则匹配式

2、取出字符串中匹配成功的多个变量

3、循环多个变量取出匹配到的值,也就是需要替换掉的变量

4、从环境变量中获取要变量值

5、使用re.sub进行替换。

实现代码:

import re
import Config# 定义一个字符串,里面有一个变量
params= '{"_ver":"3.18.1","_ct":"101","token":${token},"order_id":${order_id}}'# 写出正则匹配式
ru = r'\${(.*?)}'# 进行正则匹配,匹配多个变量
while re.search(ru,params):# 取出字符串中匹配成功的多个变量res = re.search(ru, params)# 取出匹配到的值,也就是需要替换掉的多个变量keys = res.groups()# 循环对匹配到的值进行替换for key in keys:print(key)# 从环境变量中获取要变量值value = getattr(Config, key)print(value)# 进行替换,正则匹配式,要替换变量的字符串或者函数,要被查找替换的原始字符串,该模式匹配成功后的最大替换次数(默认为替换所有匹配到的),params = re.sub(ru, value, params, 1)print(params)

运行结果:

getattr是用来获取对象中的属性或者方法的,在属性名或者方法名不确定是变量时使用。

在上面的例子中getattr(Config, key) 等价于 Config.token或者Config.order_id

token和order_id是key 在运行中对应的值

不能直接使用Config.key,因为这种情况下key就是属性名或者方法名,不能替换成key对应的变量

python 接口自动化之用例变量参数化(参数化处理器)相关推荐

  1. python接口自动化-参数化

    原文地址https://www.cnblogs.com/yoyoketang/p/6891710.html python接口自动化 -参数关联(一)https://www.cnblogs.com/11 ...

  2. python接口自动化参数化_python接口自动化-参数化

    原文地址https://www.cnblogs.com/yoyoketang/p/6891710.html python接口自动化 -参数关联(一)https://www.cnblogs.com/11 ...

  3. Python接口自动化之数据驱动

    VOL 118 01 2020-05 今天距2021年244天 这是ITester软件测试小栈第118次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  4. 如何在项目中搭建python接口自动化框架?

    文章目录 前言 一.框架目录介绍 1.common模块 读取Excel代码 读取yaml代码(支持场景关联) jsonpath断言封装代码 requests二次封装(get.post) configp ...

  5. python接口自动化基础框架结构 ——分层

    python接口自动化基础框架结构 --分层 --bin 用于存放启动文件,如run.py --cases cases目录,存放测试脚本 --data   YAML文件 --lib  存放各种附加的代 ...

  6. python接口自动化5-Json数据处理

    前言 有些post的请求参数是json格式的,这个前面第二篇post请求里面提到过,需要导入json模块处理. 一般常见的接口返回数据也是json格式的,我们在做判断时候,往往只需要提取其中几个关键的 ...

  7. python接口自动化4-绕过验证码登录(cookie)

    前言 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接). 获取不到也没关系,可以通过添加cookie的方式绕过验证码. 一.抓登录coo ...

  8. Python接口自动化之动态数据处理

    VOL 135 15 2020-06 今天距2021年199天 这是ITester软件测试小栈第135次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  9. Python接口自动化之接口依赖

    VOL 129 28 2020-05 今天距2021年216天 这是ITester软件测试小栈第129次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

最新文章

  1. PHP 接入(第三方登录)QQ 登录 OAuth2.0 过程中遇到的坑
  2. 题目 1470:【蓝桥杯】【入门题】【基础练习VIP】时间转换
  3. 计算机网络——HTTP协议和Web
  4. 采用个hook技术对writefile函数进行拦截(2)
  5. 第三次学JAVA再学不好就吃翔(part56)--StringBuffer的替换反转和截取功能
  6. Primes on Interval
  7. python导入函数模块 为什么会打印两次_5.1.2Python从模块导入函数
  8. java面试题44关于 Socket 通信编程,以下描述正确的是:( )
  9. java 远程调试 端口_java – 远程调试:在端口8787上没有连接到OpenJDK 11上的Wildfly 14...
  10. php 使用phpize报错Cannot find config.m4. Make sure that you run ‘/usr/bin/phpize‘ in the top l
  11. 懒人查看python源码方法
  12. svn 回滚文件修改
  13. Python操作Word(Win32com)
  14. 《Web安全之深度学习实战》笔记:第六章 垃圾邮件识别
  15. 设计师Adobe国际认证证书有用吗?
  16. 怎么把照片变年轻?这两个照片变年轻小妙招教给你
  17. gcc之 -ffunction-sections
  18. 将HTML代码转换为图片
  19. Delphi 2005 发布!
  20. BIOS之Option ROM详解

热门文章

  1. Java面试之synchronized的前世今生
  2. Unity入门介绍及编辑器界面
  3. svga插件_SVGA实例讲解|UI|教程|xinjiebi - 原创文章 - 站酷 (ZCOOL)
  4. Python模块subprocess小记
  5. MFC之CRect详解
  6. TS + React 找不到模块“Utils/util”或其相应的类型声明
  7. 十二、有一个排好序的列表3 9 12 24 33 41 48 56 69 72 88 90,输入一个数,插入到列表中,输出新的列表,要求保持从小到大的顺序
  8. 面向对象编程(Python版详解)
  9. 〖Python自动化办公篇⑱〗- PPT 文件自动化 - PPT 的读取
  10. php上传图片代码编辑,simditor上传本地图片 php