在做接口测试时,除了测单个接口,还需要进行业务链路间的接口测试
比如[注册-登陆]需要token鉴权的业务流
当我们用使用postman/jmeter等工具时,将注册接口的一些响应信息提取出来,放到登陆接口的请求中,来完成某个业务流的接口测试。
截取postman部分图示:
Step1:新增环境变量,并且通过编写postman脚本将响应字段提取并且保存到环境变量中
Step2:引用变量,在你需要引用变量的位置通过{{XXX}},XXX代表的是变量名
在后续接口的请求中引入{{token}},将从环境变量中把token的数值提取出来,替换掉{{token}},进行接口请求
同样的,在接口自动化编写代码时,我们也可以参考postman的参数化替换:
后续接口 如果需要使用前面接口的响应信息,直接从环境变量中取出来,通过正则表达式的替换安装到自己的需要字符串里面
举例如下:
通过正则匹配{{(.*?)}}找到{{mobile_phone}},再找到里面的mobile_phone,拿mobile_phone去环境变量中找到对应的响应值,通过字符串的replace方法,把{{mobile_phone}}替换为具体的值比如:15764340463
java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现
Pattern类的作用在于编译正则表达式后创建一个匹配模式.
Matcher类使用Pattern实例提供的模式信息对正则表达式进行匹配
public class RegexUtils {public static void main(String[] args){//1、在环境变量中,存在 变量及值"mobile_phone","13323234545"...//这里方便演示,手动存入Environment.envMap.put("mobile_phone","13323234545");Environment.envMap.put("pwd","123456");Environment.envMap.put("id","666");//2、接口请求数据中,为了方便管理测试数据,写成如下json样式,发送请求之前,进行参数化替换String str = "{\n" +" \"mobile_phone\": {{mobile_phone}},\n" +" \"pwd\": {{pwd}},\n" +" \"id\":{{id}}\n" +"}";System.out.println("原始的字符串:"+str);String replaceStr = regexReplace(str);System.out.println("替换后的字符串:"+replaceStr);}/*** 字符串替换* @param orgStr 原始字符串* @return 替换后的字符串*/public static String regexReplace(String orgStr){String result = orgStr;//compile————编译 Pattern正则匹配器Pattern pattern = Pattern.compile("\\{\\{(.*?)\\}\\}");//matcher匹配对象,和原始字符串相匹配Matcher matcher = pattern.matcher(orgStr);while (matcher.find()) {//找到的完整字符串String allGetStr = matcher.group(0);System.out.println("找到的完整字符串:"+allGetStr);//找到{{XXX}}内部的匹配的字符串String innerStr = matcher.group(1);System.out.println("找到的内部字符串:"+innerStr);//具体的要替换的值(从环境变量中找到的)Object replaceValue = Environment.envMap.get(innerStr);//替换result = result.replace(allGetStr,replaceValue+"");}return result;}}
运行结果:
关于具体的表达式内容,可以看这篇👉 CSDN