软件测试 | json和XML请求

247 阅读2分钟

1.json和XML简介

json是一种轻量级的传输数据格式,用于数据交互。json请求类型的请求头中的Content-Type对应为application/json.

XML是一种可扩展标记语言,是用来传输和存储数据。XML请求类型的请求头中的Content-Type对应为application/xml或者text/xml,这两者格式是一样,唯一的区别是编码格式。

2.json实战演示

实战演示代码如下(Python版和Java版)。

(1)Python演示代码

我们在Python编程中,使用json关键字参数发送json请求并传递请求体信息。

>>> import requests
>>> r = requests.post(
    'https://httbpin.ceshiren.com/post',
    json = {'key':'value'})
>>> r.request.headers
​
{'User-Agent':'python-requests/2.22.0',
'Accept-Encoding':' gzip,deflate'\
'Accept':'*/*','Connection':'keep-alive',
'Content-Length':'16',\
'Content-Type':'application/json'}

如果请求的参数选择是json,那么Content-Type自动变为application/json。

(2)Java演示代码

Java中使用contentType()方法添加请求头信息,使用body()方法添加请求体信息。

import static org.hamcrest.core.IsEqual.equalTo;
import static io.restassured.RestAssured.*;
​
public class Requests{
   public static void main(String[] ages){
     String jsonData = "{"key":"value"}";
     //定义请求头信息的contentType为application/json
     given().contentType("application/json").
        body(jsonData).
        when().
        post("https://httpbin.ceshiren.com/post").
        then().body("json.key",equalTo("value")).log().all();
   }
}

3.XML实战演练

实战演示代码如下(Python版和Java版)。

(1)Python演示代码

我们在Python编程中,使用data关键字参数发送XML请求并传递请求体信息。

import request
​
​
class TestRequests:
     def test_xml(self):
         xml = """
             <?xml version='1.0' encoding='utf-8'?>
             <a>hogwarts</a>
             """
          #配置请求头
          headers = {
           'Content-Type':'application/xml'0
          }
          #对httpbin发起请求
          r = requests.post('https://httpbin.ceshiren.com/
 post',data=xml,headers=headers=headers).text
          print(r)

上面示例的执行结果为Content-Type自动化变为application/xml。

(2)Java演示代码

Java中使用contentType()方法添加请求头信息,使用body()方法添加请求体信息。

创建add.xml文件。

<Envelope xmlns="http://scheams.xmlsoap.org/soap/envelop/">
      <Body>
           <Add xmlns="http://tempuri.org/">
                <intA>2</intA>
                <intB>2</intB>
            </Add>
       </Body>
 </Envelope>
 
 
 /*
  * @Author: 霍格沃兹测试开发学社
  * @Desc: '更多测试开发技术探讨,请访问:https://ceshiren.com/t/topic/15860'
  */
package ch04;
​
import static io.restassured.RestAssured.*;
import org.junit.jupiter.api.Test;
​
import org.apache.commons.io.IOUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
​
public class TestXML{
 @Test
 void testXML() throws IOException{
  // 定义请求体数据: 源自文件对象
  File file = new File("src/test/resources/add.xml");
  FileInputStream fis = new FileInputStream file);
  String reqBody = IOUtils.toString(fis,"UTF-8");
  
  //定义请求基地址
  baseURI = "http://dneonl***.com/";
  
  given()
        //定制请求内容媒体类型
        .contentType("text/xml")
        //定制请求体数据
        .body(reqBody)
        //打印请求头信息
        .log().headers()
        //打印请求体信息
        .log().body()
  .when()
        //发送请求
        .post("/calculator.asmx")
   .then()
         //响应状态码断言
         .statusCode(200);
 }
}

上面示例执行结果为contentType自动变为text/xml。

搜索微信公众号:TestingStudio霍格沃兹的干货都很硬核