软件测试 | 多套测试环境下的接口测试

518 篇文章 3 订阅
514 篇文章 2 订阅
文章讲述了在敏捷开发项目中,如何通过优化接口自动化测试脚本来适应多套测试环境。通过配置文件(如yaml)管理环境URL,实现测试环境的快速切换,减少了因环境变化而需修改测试脚本的工作量。提供了Python和Java的代码示例,展示了如何读取配置文件并根据默认环境发起请求。
摘要由CSDN通过智能技术生成

在敏捷迭代的开发项目中,为了提高测试效果和效率,我们通常会将项目的后台服务部署到多套测试环境中。那么在对这种场景的项目进行接口自动化测试时,也需要部署一套接口自动化测试环境。为了能够在不同的环境下公共一套接口测试脚本,通常会在测试脚本中配置不同环境的域名地址,来实现在不同环境下对项目执行自动化测试的工作。

实战演练

分别准备两套测试环境,都对其发起GET请求,传入参数name,对应值为hogwarts,并对响应值进行断言。

测试环境1:http://httpbin.org/get

测试环境2:https://httpbin.ceshiren.com/get

以下分被针对测试环境1和测试环境2编写接口测试用例。

(1)优化钱的测试用例

实战程序如下(Python版和Java版)。

Python演示代码

import requests
​
#测试环境1——测试用例
def test_org():
  
    res = requests.get(url="http//httpbin.org/get",params={"name":"hogwarts"})
    assert res.json()["args"]["name"] == "hogwarts"
    
#测试环境2——测试用例
def test_ceshiren():
    res = requests.get("https://httpbin.ceshiren.com/get",\
    params={"name":"hogwarts"})
    assert res.json()["args"]["name"] == "hogwarts"

Java演示代码

import org.junit,jupiter.api.Test
import static io.restassured.RestAssured.given;
import static org.hamcrest.core.IsEqual.equalTo;
public class envTest{
   //测试环境1——测试用例
   @Test
   void envOrg(){
     given().
             params("name","hogwarts").
             when().
             get("http://httpbin.org/get").
             then().
             body("args.name",equalTo("hogwarts"));
   }
   //测试环境2——测试用例
   @Test
   void envCeshiren(){
        given().
               params("name","hogwarts").
               when().
               get("https://httpbin.ceshiren.com/get").
               then().
               body("args.name",equalTo("hogwarts"));
   }
}

以上代码虽然实现了多套测试环境下的接口测试,但是每个接口测试用例都需要设置对应的一个测试环境,一旦接口测试用例发生变化,那么每个接口测试用例都需要修改。

针对以上的问题,解决办法是,可以把域名统一放在环境配置(env)文件中进行管理,然后将请求中的url地址替换成环境配置文件中对应测试环境的url地址。

还可以在测试环境汇总添加默认配置信息,如default字段,default用来配置默认使用的测试环境。例如,当前有多个测试环境,其中包括org环境和ceshiren环境,若default的值改成org。执行测试用例时就会对org环境发起请求;若defuse的值改成ceshiren,执行测试用例时就会对ceshiren环境发起请求。

(2)优化后的测试用例代码如下(Python版和Java版)。

Python演示代码

import requests
envs = {
    "default":"ceshiren",
    "org":"http://httpbin.org/get",
    "ceshiren":"http://httpbin.ceshiren.com/get"
}
# 测试用例
def test_envs():
# envs['default'] 代表 ceshiren,envs['ceshiren'] 代表对应的url
    res = rquests.get(url = envs[envs['default']])
    assert res.status_code == 200

Java演示代码

import org.junit.jupiter,api.Test;
import java.util.HashMap;
import java.util.Map;
import static io.restassured.RestAssured.given;
import static org,hamcrest.core.IsEqual.equalTo;
​
public class envTest{
    public final static Map<String,String> envs = new HashMap();
    static{
        envs.put("default","ceshiren");
        envs.put("org","http://httpin.org/get");
        envs.put("ceshiren","http://httpbin.ceshiren.ceshiren.com/get");
    }
    
    @Test
    void envs(){
         given().
                 param("name","hogwarts").
                 when().
                 get(envs.get(envs.get("default"))).
                 then().
                 body("args.name",equalTo("hogwarts"));
    }
}

上面的方案虽然将url参数与测试用例实现了解耦,但是随着项目版本的快速迭代,项目中出现的接口会越来越多,多个测试脚本文件都要设置这个envs配置信息。每次切换测试环境时,都要逐个修改envs配置信息,维护成本非常高。

(3)优化后的测试用例

将envs配置信息存储到envs.yaml文件中,然后再测试脚本中定义读取yaml文件内容的函数,用以改变测试环境。

配置文件envs.yaml内容:

default:org
org: http://httpbin.org
ceshiren: http://httpbin.ceshiren.com

Python演示代码

import requests
import yaml
​
#读取本地的配置文件yaml
def get_envs():
    with open('envs.yaml','r') as file:
        return yaml.safe_load(file)
        
#测试用例
def test_envs():
     # 获取环境配置信息
     envs = get_envs()
     #发送请求
     res = requests.get(url = envs[envs['default']] + "/get")
     prin(res.json()['headers']['Host'])

Java演示代码

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import static io.restassured.RestAssured.given;
import static org.hamcrest.core.IsEqual.equalTo;
public class envTest{
   //读取本地的配置文件yaml
   public HashMap<String,String> getEnvs() throwa IOException{
       ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
       TypeReference<HashMap<String,string>> typeReference = new
TypeReference<HashMap<String,String>>() {
       };
       HashMap<String, String> envs = null;
       String filePath = this.getClass().getResource("env.yaml").getPath();
       envs = objectMapper.readValue(new File(filePath),typeReference);
       return envs;
   }
    @Test
    void envs() throws IOException{
       //获取环境配置
       HashMap<String, String> envs = this.getEnvs();
       given().
               params("name","hogwarts").
               when().
               //发送请求
               get(envs.get(envs.get("default"))).
               then().
               body("args.name",equalTo("hogwarts"));
    }
}

当需要切换测试环境时,只需要改动配置文件envs.yaml中的default字段的值即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值