微信号:grzlwx

介绍:光荣之路官方资讯

就是这么简单!使用Rest-assured 测试Restful Web Services

2015-11-25 22:28 WadeXu


使用 Rest-assured 测试 Restful Web Services

转载注明出处: http://www.cnblogs.com/wade-xu/p/4298819.html


这里向大家介绍一个测试Restful web service 的框架,叫Rest-assured.

他提供了一系列好的功能,像DSL式的语法, XPath-Validate, 文件上传,Specification重用, 使用代理, Spring MVC mock module测试Controllers等等,让你在Java里面测试Rest service 和那些动态语言Ruby, Groovy一样灵活。

目录
       1. 前提
       2. 配置
       3. Example详解
4. Troubleshooting 5. 参考来源

前提条件


  • JDK >= 1.6

  • Maven 3


配置Maven工程pom文件如下


<dependency>
<groupId>com.jayway.restassured</groupId>
<artifactId>rest-assured</artifactId>
<version>2.3.3</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>

Example


a) 测试一个GET 请求方法

请求URL : http://10.46.28.193:8080/service/v1/user/login

返回JSON内容如下

{
    "userInfo": {
        "password": null,
        "userId": "wadexu",
        "accessSecurityCodes": "10000000000000000000",
        "firstName": "Wade",
        "lastName": "Xu",
        "status": 8,
        "officePhone": "58730",
        "email": "wadexu@test.com",
        "homePhone": "123"
    },
    "success": true,
    "error": null
}

测试代码如下:

@Before
 public void setUp() {
     RestAssured.baseURI= "http://10.46.28.193";
     RestAssured.port = 8080;
     RestAssured.basePath = "/service/v1";
 }

 @Test
 public void testUserLogin() {
   expect().
     statusCode(200).
     body(
       "success", equalTo(true),
       "userInfo.userId", equalTo("wadexu"),
       "userInfo.firstName", equalTo("Wade"),
       "userInfo.lastName", equalTo("Xu"),
       "error", equalTo(null)).
     when().
      get("/user/login?userName=wadexu&password=NzrmRcIfIW4=");
    }

注意我这里请求时的参数直接塞进了URL里, 稍后会讲到如何指明参数。


b) 如何使用JSON path

还是同上面的例子, 测试代码如下:

@Test
    public void testUserLogin_JsonPath() {
        Response response = get("/user/login?userName=wadexu&password=NzrmRcIfIW4=");
        assertEquals(200, response.getStatusCode());
        String json = response.asString();
        JsonPath jp = new JsonPath(json);
        assertEquals("wadexu", jp.get("userInfo.userId"));
        assertEquals("Wade", jp.get("userInfo.firstName"));
        assertEquals("Xu", jp.get("userInfo.lastName"));
        assertEquals("123", jp.get("userInfo.homePhone"));
    }


c) 如何使用参数

Get请求是用queryParam, 如果你直接写param,在这个case里也可以,Rest Assured 会自动判断参数类型(query or form parameter), 在有些case里, Put 或 Post 你得指明参数类型

@Test    
public
void testUserLogin_Parameter() {
final String userName = "wadexu";
final String password = "NzrmRcIfIW4="; given(). queryParam("userName", userName).queryParam("password", password). expect(). statusCode(200). body("success", equalTo(true), "userInfo.userId", equalTo("wadexu"), "userInfo.firstName", equalTo("Wade"), "userInfo.lastName", equalTo("Xu"), "error", equalTo(null)).when() .get("/user/login"); }

另外,有些Post 请求URL后面是有参数的, 这时候 你可以这样写

post("/reserve/{hotelId}/{roomNumber}", "My Hotel", 23); 

或者

given().
        pathParam("hotelId", "My Hotel").
        pathParam("roomNumber", 23).
when(). 
        post("/reserve/{hotelId}/{roomNumber}").
then().
         ..

(未完待续)

(作者:WadeXu 来源:http://www.cnblogs.com/wade-xu/p/4298819.html)



  
             
  
             
  
             
  
            
  
            
  
            
  
            
  
            
  
            
  
            
  
            
  
            
  
            

公益传播测试知识、技能与正能量!感谢作者!
分享测试生活,思考测试人生!欢迎投稿!
文章图片来自网络,如有侵权请见谅,请联系我们妥善处理。
735821166@qq.com

光荣之路软件测试培训

官网:http://www.gloryroad.cn/

微信公众号:gloryroadtrain

性能测试QQ群:415987441
软件测试招聘QQ群: 203715128
自动化3群QQ: 371211499
Python群:457561756


 
光荣之路 更多文章 今天晚上的 linux 公开课- Awk 编程 7月28日(今天)晚上的 linux 公开课- shell编程 8月4日(今天)晚上的 linux 公开课- shell编程 9月1日(本周一)晚8点半,光荣之路Web自动化系列基础课—javascript第二讲 推荐本好书《与机器赛跑》
猜您喜欢 “菜鸟”程序员和“大神”程序员的差距 python获得系统iops R语言入门第二讲:读取数据------函数read.table第二讲 iOS web Remote Debug 简介【多图杀流量】 2016 ACOUG ASIA TOUR | 7月盛夏,与技术相约