Java+Testlink实现接口自动化测试-7-获取用例期待结果和步骤中的Json信息

xiaoxiao2021-02-28  32

        前面一篇我们学习了如何拿到testlink中测试用例的步骤,这篇我们介绍如何拿到测试用例步骤对应的期待结果。从步骤或者期待结果去解析数据,这个是我们的重点。不管步骤还是期待结果,都是我们设定好的Json格式字符串。我们需要拿到接口的一些请求方式和请求地址,或者post方法一般都有json的传参,以及请求完之后,我们需要拿到期待结果的响应状态码,进行测试断言,这个是一个接口测试的基本过程。

       不知道你们注意到没有,前面我把project 名称“API_Automation”一直是使用硬编码的方式,这个是不灵活的方式,我这里暂时不去提取到配置文件,等我们写用例运行入口的代码再去优化这个问题。我们的思想就是,我连接你的testlink环境,你只需要提供project名称,我就默认去遍历这个项目下的测试套件,然后嵌套遍历测试用例,再次嵌套遍历测试步骤,一次性运行完全部的接口测试用例。

1.获取步骤对应的期待结果

     按照前面一篇获取步骤的思路,我们去获取用例下步骤的期待结果。在com.testlink.tests包下,新建一个GetExpectedResult.java文件。注意下面我的获取用例的方式,然后这里也需要进行数据清洗操作。

package com.testlink.tests; import java.util.List; import org.apache.commons.lang3.StringEscapeUtils; import org.testng.annotations.Test; import com.qa.util.TestlinkUtil; import br.eti.kinoshita.testlinkjavaapi.TestLinkAPI; import br.eti.kinoshita.testlinkjavaapi.model.TestCase; import br.eti.kinoshita.testlinkjavaapi.model.TestCaseStep; public class GetExpectedResult { TestLinkAPI api = TestlinkUtil.connect(); @Test public void getExpectedResult() { //我这里直接根据external id去拿到单个测试用例,方便测试,就不像前面那样全部获取所有用例 TestCase tc = api.getTestCaseByExternalId("at-1", null); //得到单个用例的测试步骤集合 List<TestCaseStep> steps = tc.getSteps(); //遍历步骤,但是实际上我们在testlink只写了一个测试步骤,集合只有一个元素 for (TestCaseStep testCaseStep : steps) { String expectResult = testCaseStep.getExpectedResults(); System.out.println(expectResult); //数据清洗 //去除最外层的<p> </p> String s1 = expectResult.split("<p>")[1].split("</p>")[0]; //把全部br换行符替换成空字符 String s2 = s1.replaceAll("<br />", ""); //为了双引号在控制台正常显示 String result = StringEscapeUtils.unescapeHtml4(s2); System.out.println(result); } } }

先来解释下什么是ExternalId,请看下图

上面是根据这个红圈id来得到这个用例,从而得到这个用例下所有信息。

运行测试结果:

[RemoteTestNG] detected TestNG version 6.14.3 2018-06-03 11:11:52 848 INFO TestBase:28 - 正在读取配置文件... Hello! <p>{"code":"200"}</p> {"code":"200"} PASSED: getExpectedResult

      再看代码,只要你给我提供一个TestCase对象,我就给你返回期待结果字符串,至于你如何找到TestCase不是这个方法关系的问题,我们抽象方法如下,为了节约代码篇幅,我没有贴TestlinkUtil.java全部代码,下面这段代码放最后就行。

public static String getResult(TestLinkAPI api,TestCase tCase) { TestCase tc = api.getTestCaseByExternalId(tCase.getFullExternalId(), null); List<TestCaseStep> tcs = tc.getSteps(); String result = null; //遍历steps集合 for (TestCaseStep testCaseStep : tcs) { String expectResult = testCaseStep.getExpectedResults(); //System.out.println(expectResult); //数据清洗 //去除最外层的<p> </p> String s1 = expectResult.split("<p>")[1].split("</p>")[0]; //把全部br换行符替换成空字符 String s2 = s1.replaceAll("<br />", ""); //为了双引号在控制台正常显示 result = StringEscapeUtils.unescapeHtml4(s2); } return result; }

     下面写一个测试类,来测试我们抽取到TestlinkUtil.java中的getResult方法好不好用。

package com.testlink.tests; import org.testng.annotations.Test; import com.qa.util.TestlinkUtil; import br.eti.kinoshita.testlinkjavaapi.TestLinkAPI; import br.eti.kinoshita.testlinkjavaapi.model.TestCase; public class GetResultTest { TestLinkAPI api = TestlinkUtil.connect(); @Test public void getResult() { String ExternalID = "au-1"; TestCase tc = api.getTestCaseByExternalId("at-1", null); String result = TestlinkUtil.getResult(api, tc); System.out.println(result); } }

运行结果:

[RemoteTestNG] detected TestNG version 6.14.3 2018-06-03 11:56:09 555 INFO TestBase:28 - 正在读取配置文件... Hello! {"code":"200"} PASSED: getResult

2.获取请求方式

      目前,我们拿到了测试用例的步骤和期待结果。接下来就是对JSON字符串进行解析操作,得到对应json对象的值。这里,我们先介绍得到请求方式。因为这个最重要,一旦拿到请求方式,就可以决定调用get还是post(其他方法暂不考虑)方法去进行接口测试。

在com.testlink.tests包新建一个GetRequestType.java文件

package com.testlink.tests; import org.testng.annotations.Test; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.qa.util.TestUtil; import com.qa.util.TestlinkUtil; import br.eti.kinoshita.testlinkjavaapi.TestLinkAPI; import br.eti.kinoshita.testlinkjavaapi.model.TestCase; public class GetRequestType { TestLinkAPI api = TestlinkUtil.connect(); @Test public void getRequestMethod_get() { String ExternalID = "at-1"; TestCase tc = api.getTestCaseByExternalId(ExternalID, null); String action = TestlinkUtil.getTestCaseAction(api, tc); //把字符串转换成json对象 JSONObject actionJson = JSON.parseObject(action); //下面开始解析得到名称为method的json对象的值 String method = TestUtil.getValueByJPath(actionJson, "method"); System.out.println(method); } @Test public void getRequestMethod_post() { String ExternalID = "at-2"; TestCase tc = api.getTestCaseByExternalId(ExternalID, null); String action = TestlinkUtil.getTestCaseAction(api, tc); //把字符串转换成json对象 JSONObject actionJson = JSON.parseObject(action); //下面开始解析得到名称为method的json对象的值 String method = TestUtil.getValueByJPath(actionJson, "method"); System.out.println(method); } }

运行测试结果:

[RemoteTestNG] detected TestNG version 6.14.3 2018-06-03 12:49:15 098 INFO TestBase:28 - 正在读取配置文件... Hello! get post PASSED: getRequestMethod_get PASSED: getRequestMethod_post

      下面来对获取请求方法进行封装,同样只贴出这个方法,不贴出全部TestlinkUtil.java代码。

public static String getRequestType(String stepAction) { //先把string转换成json对象 JSONObject actionJson = JSON.parseObject(stepAction); //注意这里method是硬编码,和你testlink步骤中要求一致 String requestType = TestUtil.getValueByJPath(actionJson, "method"); return requestType; }

再次写一个单元测试来测试封装的方法。

package com.testlink.tests; import org.testng.annotations.Test; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.qa.util.TestUtil; import com.qa.util.TestlinkUtil; import br.eti.kinoshita.testlinkjavaapi.TestLinkAPI; import br.eti.kinoshita.testlinkjavaapi.model.TestCase; public class GetRequestTypeTest { TestLinkAPI api = TestlinkUtil.connect(); @Test public void getRequestMethod_get() { String ExternalID = "at-1"; TestCase tc = api.getTestCaseByExternalId(ExternalID, null); String action = TestlinkUtil.getTestCaseAction(api, tc); String request = TestlinkUtil.getRequestType(action); System.out.println(request); } @Test public void getRequestMethod_post() { String ExternalID = "at-2"; TestCase tc = api.getTestCaseByExternalId(ExternalID, null); String action = TestlinkUtil.getTestCaseAction(api, tc); String request = TestlinkUtil.getRequestType(action); System.out.println(request); } }

运行结果:

[RemoteTestNG] detected TestNG version 6.14.3 2018-06-03 13:08:47 121 INFO TestBase:28 - 正在读取配置文件... Hello! get post PASSED: getRequestMethod_get PASSED: getRequestMethod_post       本篇学完之后,可以得到用例步骤中的具体测试步骤描述文字和json中的请求类型。这个请求类型,将来在我们测试执行入门模块会进行调用去判断,从而决定去调用RestClient.java中的哪个一个封装好的接口请求方法。下一篇继续介绍json解析,拿到接口url和json参数以及期待结果中的状态码。

转载请注明原文地址: https://www.6miu.com/read-1950187.html

最新回复(0)