51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 1904|回复: 0

[讨论] Jsoup做接口测试

[复制链接]
  • TA的每日心情
    郁闷
    2022-8-29 14:43
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    发表于 2018-4-18 13:09:27 | 显示全部楼层 |阅读模式
    最早用Jsoup是有一个小的爬虫应用要写,发现Jsoup较HttpClient轻便多了,API也方便易懂,上手很快,对于
    response的Document解析的选择器用的是cssSelector(Jquery)选择器,觉得还不错,后来因为其它原因,没有
    深入的研究,最近看到一位大神用这个,我也就再学习了一下,顺便把这个用Jsoup做接口测试的相关知识点
    发出来给大家参考下!


    一. 接口测试的相关知识点准备:

      1.firefox, firebug安装

      2.如何查看请求方式及链接,如下图



      我们可以看出,请求的方式是GET, 链接是www.baidu.com

    二. Jsoup示例

      1.所使用到的jar包:jsoup-*.jar

      2.示例:(不要使用百度首页来做试验!!!使用百度首页做试验出不来结果的人,不要来问我为什么!!!)  

    1. import java.io.IOException;

    2. import org.jsoup.Jsoup;
    3. import org.jsoup.nodes.Document;

    4. public class Test {
    5.      
    6.     public void testJsop(){
    7.         try {
    8.             Document doc = Jsoup.connect("http://www.cnblogs.com/zhangfei/p/4283930.html").get();
    9.             System.out.println(doc);
    10.         } catch (IOException e) {         
    11.             e.printStackTrace();
    12.         }
    13.     }
    14.      
    15.     public static void main(String[] args) {
    16.         Test t = new Test();
    17.         t.testJsop();
    18.     }
    19.      
    20. }
    复制代码

      输出结果就是当前页面的Document对象,然后再解析这个页面对象就可以了。

    三. 参数的处理

      1.Get请求中的参数

      

      对于这种参数,一般有两种写法:

      第一种:

    1. public class Test {
    2.      
    3.     public void testJsop(){
    4.         try {
    5.             Document doc = Jsoup.connect("http://www.cnblogs.com/zhangfei/p/?page=3").get();
    6.             System.out.println(doc);
    7.         } catch (IOException e) {         
    8.             e.printStackTrace();
    9.         }
    10.     }
    11.      
    12.     public static void main(String[] args) {
    13.         Test t = new Test();
    14.         t.testJsop();
    15.     }
    16.      
    17. }
    复制代码

      第二种:  

    1. public class Test {
    2.      
    3.     public void testJsop(){
    4.         try {
    5.             Connection conn = Jsoup.connect("http://www.cnblogs.com/zhangfei/p/");
    6.             conn.data("page","3");
    7.             Document doc = conn.get();         
    8.             System.out.println(doc);
    9.         } catch (IOException e) {         
    10.             e.printStackTrace();
    11.         }
    12.     }
    13.      
    14.     public static void main(String[] args) {
    15.         Test t = new Test();
    16.         t.testJsop();
    17.     }
    18.      
    19. }
    复制代码

      2.post请求中的参数

       post请求的参数,一般以表单提交居多,我们来看看如何确定参数:

      

      上图中,左边红框框是key, 右边红框框是value,一般情况下,在测试系统中,输入用户名与密码就行了,
    比如:  

    1. public class Test {
    2.      
    3.     public void testJsop(){
    4.         try {
    5.             Connection conn = Jsoup.connect("https://passport.jd.com/new/login.aspx");
    6.             conn.data("loginname","test1");
    7.             conn.data("loginpwd","test1");
    8.             Document doc = conn.post();        
    9.             System.out.println(doc);
    10.         } catch (IOException e) {         
    11.             e.printStackTrace();
    12.         }
    13.     }
    14.      
    15.     public static void main(String[] args) {
    16.         Test t = new Test();
    17.         t.testJsop();
    18.     }
    19.      
    20. }
    复制代码

    四.响应超时请求处理  

    1. public class Test {
    2.      
    3.     public void testJsop(){
    4.         try {
    5.             Connection conn = Jsoup.connect("https://passport.jd.com/new/login.aspx");
    6.             conn.data("loginname","test1");
    7.             conn.data("loginpwd","test1");
    8.             conn.timeout(30000);
    9.             Document doc = conn.post();        
    10.             System.out.println(doc);
    11.         } catch (IOException e) {         
    12.             e.printStackTrace();
    13.         }
    14.     }
    15.      
    16.     public static void main(String[] args) {
    17.         Test t = new Test();
    18.         t.testJsop();
    19.     }
    20.      
    21. }
    复制代码

    五.cookies的管理

      在我们登录后,保存此次登录的cookies,这样,后续的操作才可以继续进行,Jsoup提供了很简便的方
    式来保存cookies  

    1. public class Test {
    2.      
    3.     public void testJsop(){
    4.         try {
    5.             Connection conn = Jsoup.connect("https://passport.jd.com/new/login.aspx");
    6.             conn.data("loginname","test1");
    7.             conn.data("loginpwd","test1");
    8.             conn.timeout(30000);           
    9.             conn.method(Method.POST);
    10.             Response response = conn.execute();
    11.             Map<String, String> cookies = response.cookies();
    12.             Document doc = Jsoup.connect("http://order.jd.com/center/list.action")
    13.                 .cookies(cookies)
    14.                 .timeout(30000)
    15.                 .get();
    16.         } catch (IOException e) {         
    17.             e.printStackTrace();
    18.         }
    19.     }
    20.      
    21.     public static void main(String[] args) {
    22.         Test t = new Test();
    23.         t.testJsop();
    24.     }
    25.      
    26. }
    复制代码

    上面的示例中,可以看出,要取得cookies,必须要有个Response的对象,所以,要用execute方法,如果
    直接用post方面,返回的则是Document对象,但在用execute方法时,要事先调用一下method方法设定
    好请求方式即可。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-3-29 04:00 , Processed in 0.062636 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表