接口自动化测试平台系列:场景化执行

Posted 程序员小捣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口自动化测试平台系列:场景化执行相关的知识,希望对你有一定的参考价值。

前端很简单,点击“执行”按钮即可,会像后端传入该集合的id
后端拿到集合id后,会执行以下几步操作:

拿到所有全局变量
拿到集合变量(集合变量只会在该集合内生效,不会在其他集合中生效)
声明测试报告的保存路径
更新集合的最后执行人与最后执行时间
调用testng类,进行接口执行,并生成报告

Service

@Override
    public ResponseVo collectionExcute(Integer collectionId) {

        ResponseVo responseVo = new ResponseVo();

        ApiTestConfig.apiList = apiTestCaseMapper.selectCollectionApiList(collectionId);
        ApiTestConfig.collectionId = collectionId;

        // 全局变量赋值
        List<Variable> globalVariableList = apiTestConfigMapper.selectGlobalVariable();
        for (Variable variable:globalVariableList){
            ApiTestConfig.globalVariableMap.put(variable.getVariableName(),variable.getVariableValue());
        }

        // 集合变量赋值
        List<Variable> collectionVariableList = apiTestCollectionMapper.selectCollectionVariable(collectionId);
        for (Variable variable:collectionVariableList){
            ApiTestConfig.collectionVariableMap.put(variable.getVariableName(),variable.getVariableValue());
        }

        // 测试报告保存路径
        ApiTestConfig.reportName = String.valueOf(System.currentTimeMillis())+ ".html";
        Collection collection = new Collection();
        collection.setId(collectionId);
        collection.setReportPath("/report/" + ApiTestConfig.reportName);
        // 更新最后执行人和最后执行时间
        User u = HttpBasicAuthorizeAttribute.getTokenUserInfo().get();
        collection.setExcuterCode(u.getCode());
        collection.setExcuterName(u.getName());
        collection.setExcuteDatetime(new Date());
        apiTestCollectionMapper.updateCollection(collection);

        // 测试执行
        TestNG testNg = new TestNG();
        Class[] listenerClass = {ExtentTestNGIReporterListener.class};
        testNg.setListenerClasses(Arrays.asList(listenerClass));

        testNg.setTestClasses(new Class[]{CollectionExcute.class});
        testNg.run();

        responseVo.setIsSuccess(Boolean.TRUE);
        responseVo.setResult("执行完毕");

        return responseVo;
    }

有一个DataProvider_Formysql类,作用是重写了Iterator<Object[]>,将集合内的所有接口以迭代器的形式通过DataProvider传入@Test中

CollectionExcute

public class CollectionExcute {

    @DataProvider(name = "testData")
    private Iterator<Object[]> getData(){

        return new DataProvider_ForMysql(ApiTestConfig.apiList);
    }

    @Test(dataProvider = "testData")
    public void testCase(TestCase testCase){

        Integer collectionId = ApiTestConfig.collectionId;

        // 返回结果的body
        String result = "";

        Response response = ApiTestUtils.doRequest(testCase, collectionId);

        try {
            result = response.body().string();
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 保存变量
        ApiTestUtils.saveVariable(result, testCase, collectionId);

        // 执行校验
        ApiTestUtils.verifyResult(result, testCase, collectionId);
    }
}

DataProvider_ForMysql

public class DataProvider_ForMysql implements Iterator<Object[]> {

    /** 查询结果集 */
    List<TestCase> caseList;

    /** 总行数 */
    private int rowNum=0;
    /** 当前行数 */
    private int curRowNo=0;

    public DataProvider_ForMysql(List<TestCase> cases){
        this.caseList = cases;
        this.rowNum = caseList.size();
    }

    @Override
    public boolean hasNext() {
        if(rowNum==0||curRowNo>=rowNum){
            return false;
        }else{
            return true;
        }
    }

    @Override
    public Object[] next() {
        TestCase testCase = caseList.get(curRowNo);
        Object[] o=new Object[1];
        o[0]=testCase;
        this.curRowNo++;
        return o;
    }
}

最后将执行完成后的“集合详情”数据返回给前端,让前端toast提示执行完毕,并更新报告的生成时间,此时点击“测试报告”按钮即可通过最新的url跳转至新的测试报告页面。

最后:【可能给予你一定的帮助】

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!
关注我的微信公众号【软件测试小dao】免费获取~

我的学习交流群:644956177 群里有技术大牛一起交流分享~

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

以上是关于接口自动化测试平台系列:场景化执行的主要内容,如果未能解决你的问题,请参考以下文章

Flask 编写http接口api及接口自动化测试

接口测试平台:场景执行支持定时构建

基于 Jmeter 的 web 端接口自动化测试平台

接口自动化场景优化,MeterSphere开源持续测试平台v1.19.0发布

python自动化自动化测试平台开发:6.后端开发之用例报告的上传

接口自动化支持插件扩展,提供MQTT插件,MeterSphere开源持续测试平台v1.13.0发布