zoukankan      html  css  js  c++  java
  • 【接口测试】HttpClient+fastJson 总结与案例

    多次理解,反复练习,破釜沉舟。

    HttpCLient是什么

    Apache Jakarta Common 下的子项目
    支持 HTTP 协议的客户端编程工具包
    支持 HTTP 协议最新的版本

    怎么利用HttpClient写自动化

    简化重点:

    1、接口请求与接口响应(先要理解http协议),常见的以下两种请求方式

       Get

     Post

    2、数据解析,学会以下用法

     JsonObject

     JsonArray

    3、结果断言

    演示代码片段

    这里以https://my.oschina.net/u/3559695/blog/1600534/网页的接口为例 1 @Test

     2     public void test1() throws IOException {
     3 //      构造数据
     4         String cookie = "111111";//会定时更新,自己去获取吧~
     7         //json的写法  => Content-Type:application/json  (传输的数据格式)
     8 //        User user=new User();//需要新建一个User类,命名属性的set方法
     9 //        user.setUserId(3559695);
    10 //        user.setSkillsNum(5);
    11 //        String jsonString=JSON.toJSONString(user); 等同于  String jsonString=" {"userId":3559695,"skillsNum":5}";
    12 // System.out.println("打印"+jsonString); 13 // StringEntity stringEntity=new StringEntity(jsonString); 14 15 //form的写法 => Content-Type:application/x-www-form-urlencoded 16 //携带普通的参数params的方式 17 List<NameValuePair> params=new ArrayList<>(); 18 params.add(new BasicNameValuePair("userId","3559695"));//BasicNameValuePair是存储键值对的类 19 params.add(new BasicNameValuePair("skillsNum","5")); 20 String jsonString=EntityUtils.toString(new UrlEncodedFormEntity(params, Consts.UTF_8));//这里就是:userId=3559695&skillsNum=5 21 System.out.println(jsonString); 22 23 //1、打开浏览器 24 CloseableHttpClient httpClient = HttpClients.createDefault(); 25 //2、创建httpGet对象 26 HttpPost httpPost = new HttpPost("https://my.oschina.net/u/3559695/radar/getUserPortraitRadarMap"); 27 httpPost.addHeader("Cookie", cookie); 28 // httpPost.addHeader("Accept-Encoding","gzip, deflate, br"); 29 httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded"); 30 httpPost.addHeader("User-Agent", 31 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"); 32 // httpPost.setEntity(stringEntity); 这个是json格式的方式 33 httpPost.setEntity(new UrlEncodedFormEntity(params,"UTF-8")); 34 //3、发送请求,获取响应模型 35 CloseableHttpResponse httpResponse = httpClient.execute(httpPost); 36 //4、从响应模型获取响应实体 37 HttpEntity httpEntity = httpResponse.getEntity(); 38 //5、将响应实体转为String 39 if (httpEntity != null){ 40 String str = EntityUtils.toString(httpEntity); 41 System.out.println(str); 42 //6、String解析为JsonObject、JsonArray 43 JSONObject jsonObject=JSONObject.parseObject(str); 44 System.out.println(jsonObject); 45 System.out.println("输出状态码code:"+jsonObject.getString("code")); 46 System.out.println(jsonObject.get(1)); 47 JSONObject jsonObject1=jsonObject.getJSONObject("result"); 48 System.out.println(jsonObject1); 49 JSONArray jsonArray=JSONArray.parseArray(jsonObject1.getString("skills")); 50 System.out.println(jsonArray); 51 System.out.println(jsonArray.get(1)); 52 53 //测试 54 Assert.assertEquals(jsonObject.getString("code"),"1"); 55 Assert.assertTrue(jsonArray.get(1).equals("社区影响力")); 56 Assert.assertNotNull(jsonObject.getString("result")); 57 Assert.assertNotSame(jsonObject1.getString("skills"),jsonArray); 58 59 }else EntityUtils.consume(httpEntity); 60 //释放资源 61 httpResponse.close(); 62 httpClient.close(); 63 }

     url响应结果:

    {"code":1,"message":"success","result":{"skills":["社区活跃度","社区影响力","技术贡献度","活动活跃性","开源贡献度","学习积极性"],"maxSkillScore":100,"skillsScore":[11.932739749333637,10.202996646175928,10.279304325337817,5.0,5.0,12.192893401015228]},"time":"2019-11-21 12:45:10"}
    

      

    持续更新,欢迎补充。

  • 相关阅读:
    如何在一个for语句中迭代多个对象(2.7)
    yield列表反转 islice切片(2.6)
    yield和生成器, 通过斐波那契数列学习(2.5)
    python实现线程池(2.4)
    LOJ 3120: 洛谷 P5401: 「CTS2019 | CTSC2019」珍珠
    瞎写的理性愉悦:正整数幂和与伯努利数
    bzoj 3328: PYXFIB
    LOJ 3119: 洛谷 P5400: 「CTS2019 | CTSC2019」随机立方体
    洛谷 P5345: 【XR-1】快乐肥宅
    LOJ 3089: 洛谷 P5319: 「BJOI2019」奥术神杖
  • 原文地址:https://www.cnblogs.com/fatCat1/p/11904954.html
Copyright © 2011-2022 走看看