代码触发testng执行

在自动化测试平台中,如何实现根据前端传入的数据,批量执行测试用例,并生成测试报告呢?
这里记录一次代码执行testng.xml文件,并可接收前端传入的参数,后续遍历该参数:
步骤;
1.controller调用下面的代码,并传入param;
public static int RunxmlByList(String param, String xmlName) {

    String xmlName1 = xmlName;
    //根据传递过来的xmlName,找到目录下的对应的xml
    InputStream inputStream = RunTestUtil.class.getClassLoader().getResourceAsStream(xmlName);
    TestNG testNG = new TestNG();
    SuiteXmlParser suiteXmlParser = new SuiteXmlParser();
    List<XmlSuite> suites = new ArrayList<>();
    XmlSuite xmlSuite = suiteXmlParser.parse(xmlName, inputStream, true);
    suites.add(xmlSuite);
    //定义一个map键值对
    Map<String,String> parameters = new HashMap<>();
    //此时参数的格式是name:1,2,3,4,5,6
    //要看一下这个xml到底是怎么运行的?去xml文件中xmlAndParamter.xml
    parameters.put("list", param);//本身这个xml中就有name这个参数,那么这么做就会替换掉原来的name
    xmlSuite.setParameters(parameters);
    testNG.setXmlSuites(suites);
    //添加一个小的监听器
    TestListenerAdapter listener = new TestListenerAdapter();
    testNG.addListener(listener);

    List list=new ArrayList();
    list.add(ExtentTestNGIReporterListener);
    testNG.setListenerClasses(list);
    testNG.run();

    //收集通过的用例和失败的用例
    List<ITestResult> pass = listener.getPassedTests();
    log.info("本次通过的用例数是:"+pass.size());
    List<ITestResult> failed = listener.getFailedTests();
    System.out.println("本次失败的用例数是:"+failed.size());

    return testNG.getStatus();
}

2.xml文件中执行的就是这个类:这里是重点:

public class CaseByList {
//定义一个公共的name,为了使后面的DataProvider也能取到这个值
private String list;
// @BeforeClass,不知道为什么,使用@BeforeClass,无法获取到name
@BeforeSuite
@Parameters(“list”)
public void beforeClass(String list){
this.list=list;
System.out.println(“给name进行赋值”+this.list);

}



//执行哪些用例呢?从此处获得
@DataProvider(name = "getList")
public Iterator<Object[]> getList(){

//此处返回的就是一个ReqInfo 数组,也就是待执行的数组
List caseList=new ArrayList<>();

    //这一步需要TestCase的toString方法符合json字符串
    caseList= JSONArray.parseArray(this.list,TestCase.class);


    log.info("当前长度是:"+caseList.size());
    for (TestCase testCase : caseList) {
        System.out.println("testCase:"+testCase.toString());
    }
    List<Object[]> links = new ArrayList<Object[]>();
    for (Object u : caseList) {
        //做一个形式转换,否则无法set
        links.add(new Object[] { u });
        System.out.println();
    }
    return links.iterator();
}


//这个是真正去执行的动作
@Test(dataProvider = "getList" )
public void RunTest(TestCase testCase) throws Exception {
    Reporter.log(testCase.getBusinessdesc()+"请求原文=="+testCase.getRequestData());
    JSONObject jsonObject= HttpExceut.excuteRequest(testCase);
    Reporter.log(testCase.getBusinessdesc()+"响应结果=="+jsonObject.toString());

// SoftAssert softAssert=new SoftAssert();
// //先校验第一层,再校验第二层
// softAssert.assertEquals(jsonObject.getString(“code”),“0000”,“请求出错,code期望返回0000,实际返回=”+jsonObject.getString(“code”));
// JSONObject jsonObject1=jsonObject.getJSONObject(“bizData”);
// Boolean aBoolean = AssertMethod.JsonCompare(JSONObject.parseObject(testCase.getExpectResp()),jsonObject1);
// softAssert.assertTrue(aBoolean);
// softAssert.assertAll();
JSONObject excep=JSONObject.parseObject(testCase.getExpectResp());
Boolean isSuccess = isSuccess(excep, jsonObject);
Assert.assertTrue(isSuccess,“期望返回==”+excep.toString()+“实际返回==”+jsonObject.toString());

}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值