51Testing软件测试论坛

标题: java+testng接口测试 [打印本页]

作者: 小文0111    时间: 2019-3-19 15:50
标题: java+testng接口测试

最近写了三个接口,很不想写了,觉得好麻烦呀,用postman比这个简洁多了,为什么要写代码呀,为都要学习代码呀呀,我现在还没觉得手写代码比用工具工作上优势体现在哪里了~~知道的告诉我下吧

因为担心我以后很长一段时间不会写代码,所以这三个仅有的接口代码也贴上来做个笔记吧

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  5.     <modelVersion>4.0.0</modelVersion>

  6.     <groupId>interfaceAPI</groupId>
  7.     <artifactId>interfaceAPI</artifactId>
  8.     <version>1.0-SNAPSHOT</version>
  9.     <dependencies>
  10.         <dependency>
  11.             <groupId>org.testng</groupId>
  12.             <artifactId>testng</artifactId>
  13.             <version>6.14.3</version>
  14.             <scope>test</scope>
  15.         </dependency>

  16.         <dependency>
  17.             <groupId>com.alibaba</groupId>
  18.             <artifactId>fastjson</artifactId>
  19.             <version>1.2.29</version>
  20.         </dependency>

  21.         <dependency>
  22.             <groupId>org.apache.httpcomponents</groupId>
  23.             <artifactId>httpclient</artifactId>
  24.             <version>4.5.3</version>
  25.         </dependency>

  26.         <dependency>
  27.             <groupId>org.apache.commons</groupId>
  28.             <artifactId>commons-lang3</artifactId>
  29.             <version>3.5</version>
  30.         </dependency>
  31.     </dependencies>
  32.     <build>
  33.         <plugins>
  34.             <plugin>
  35.                 <groupId>org.apache.maven.plugins</groupId>
  36.                 <artifactId>maven-compiler-plugin</artifactId>
  37.                 <version>3.1</version>
  38.                 <configuration>
  39.                     <source>1.8</source>
  40.                     <target>1.8</target>
  41.                     <encoding>UTF-8</encoding>
  42.                 </configuration>
  43.             </plugin>
  44.             <plugin>
  45.                 <groupId>org.apache.maven.plugins</groupId>
  46.                 <artifactId>maven-surefire-plugin</artifactId>
  47.                 <version>2.19.1</version>
  48.                 <configuration>
  49.                     <!--<testFailureIgnore>true</testFailureIgnore>-->
  50.                     <forkMode>never</forkMode>
  51.                     <argLine>-Dfile.encoding=UTF-8</argLine>
  52.                     <suiteXmlFiles>
  53.                         <suiteXmlFile>xml/testNG.xml</suiteXmlFile>  //testng报告
  54.                         <suite name="interfaceAPI" parallel="false">
  55.                             <test name="testGetHomePage_success">
  56.                                 <classes>
  57.                                     <class name="com.xzt.testng.Test_api"></class>
  58.                                 </classes>
  59.                             </test>
  60.                         </suite>

  61.                     </suiteXmlFiles>
  62.                 </configuration>
  63.             </plugin>
  64.         </plugins>
  65.     </build>


  66. </project>
复制代码

导入testng后,怎么使用testng原生报告,上个帖子已经说过了,请自行查看

然后下载几个封装好的jar包----稍后我会附上jar包

[attach]123039[/attach]

然后开始在test里写代码了,在test里写是因为使用testng可以单个执行任意一个方法,不需要main入口

其中有一个@beforemethod是获取token用的,在任意一个方法执行前都会先去执行获取token这个接口

  1. package com.xzt.testng;

  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import org.testng.Assert;
  5. import org.testng.annotations.BeforeMethod;
  6. import org.testng.annotations.Test;
  7. import com.xzt.testng.util.EncryptUtils;
  8. import com.xzt.testng.util.HttpUtil;
  9. import java.util.Date;
  10. import java.util.HashMap;
  11. import java.util.Map;

  12. public class Test_api {

  13.     private String baseUrl = "http:/要测试的host/";

  14.     private static String TOKEN;

  15.     private static String SUCCESS = "0000";

  16.     private static String terminalType ="ios";
  17.     private static int responseCode = 201;
  18.     private static String name;

  19.     @BeforeMethod
  20.     public void getToken(){
  21.         String tokenUrl = baseUrl + "接口请求url";
  22.         String responseStr = HttpUtil.get(tokenUrl, null);
  23.         JSONObject object = JSON.parseObject(responseStr);
  24.         TOKEN = object.getJSONObject("content").getString("token");
  25.         System.out.println(TOKEN);

  26.     }
  27.     @Test
  28.     public void testGetHomePage_success(){
  29.         Map<String,Object> params = new HashMap<>();
  30.         params.put("nowTime",new Date().getTime());
  31.         params.put("terminalType", terminalType);
  32.         params.put("sex", 0);
  33.         params.put("uId", "ad634938-14ce-4f8f-b15f-9af87d1ad73a");
  34.         params.put("userId", "ad634938-14ce-4f8f-b15f-9af87d1ad73a");

  35.         String url = baseUrl + "organizationMsz-service/manage/v1/getHomePageInfo.do";
  36.         String responseStr = HttpUtil.postJson(url, params);
  37.         System.out.println(responseStr);
  38.         JSONObject object = JSON.parseObject(responseStr);
  39.         Assert.assertEquals(object.getString("returnNo"), SUCCESS);//校验接口返回码,我们的程序正常代码是0000
  40.     }

  41.     @Test
  42.     public void testGetUserDetailInfo_success() {
  43.         Map<String, Object> params = new HashMap<>();
  44.         params.put("nowTime", new Date().getTime());
  45.         params.put("sex", 0);
  46.         params.put("token", TOKEN);
  47.         params.put("uId", "ad634938-14ce-4f8f-b15f-9af87d1ad73a");
  48.         params.put("userId", "ad634938-14ce-4f8f-b15f-9af87d1ad73a");

  49.         String url = baseUrl + "接口请求url";
  50.         String responseStr = HttpUtil.postJson(url, params);
  51.         System.out.println(responseStr);//打印出接口返回参数
  52.         JSONObject object = JSON.parseObject(responseStr);//转换成json格式好去执行断言

  53.         Assert.assertEquals(object.getString("returnNo"), SUCCESS);
  54.     }


  55.     @Test
  56.     public void testGetUserDetailInfo_userNotLogin() {
  57.         Map<String, Object> params = new HashMap<>();
  58.         params.put("nowTime", new Date().getTime());
  59.         params.put("sex", 0);
  60.         params.put("token", TOKEN);
  61.         params.put("uId", "ad634938-14ce-4f8f-b15f-9af87d1a");
  62.         params.put("userId", "ad634938-14ce-4f8f-b15f-9af87d");

  63.         String url = baseUrl + "请求url";
  64.         String responseStr = HttpUtil.postJson(url, params);
  65.         System.out.println(responseStr);
  66.         JSONObject object = JSON.parseObject(responseStr);

  67.         Assert.assertEquals(object.getString("returnNo"), "0031");//这个是期待的错误返回码
  68.     }

  69.     @Test
  70.      public void xztlogin() throws Exception{
  71.         String loginUrl = baseUrl + "url";
  72.         Map<String, Object> loginParams = new HashMap<>();
  73.         loginParams.put("mobile", "133~~~~");
  74.         loginParams.put("password", "123456");
  75.         String content = JSON.toJSONString(loginParams);//这个有一点点复杂,我们登录的请求接口是加密过的,所以入参你只会看到一个content:"里面是一堆加密过的用户手机号+密码的信息",

  76.         Map<String, Object> params = new HashMap<>();
  77.         params.put("content",EncryptUtils.bytesToHexString(EncryptUtils.encrypt(content.getBytes())));//所以这里照我们程序的加密格式,把content里的信息转换下再发send出去
  78.         String response = HttpUtil.postJson(loginUrl, params);
  79.         System.out.println(response);
  80.         JSONObject loginResponse = JSON.parseObject(response);
  81.         Assert.assertEquals(loginResponse.getString("returnNo"), SUCCESS);

  82.     }


  83. }
复制代码

我最近有点没有学习的动力了,项目停滞,无所事事;写了三个接口,比我当初用postman做整个APP接口自动化的时间都要长,一时没有get到代码测试的优势,大概也是因为目前没有代码发挥的余地(内心一直对会写代码的人保持敬畏之心的);后台目前也处于重构时期,WEBUI自动化也不太合适这时候动工;不带着目的性的学习果然没有效率哇







欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2