接口测试初学者心得--从 1 往后

文章目录[隐藏]

之前从0到1也花了一部分时间,现在从1要开始了,我也继续发个帖来总结下。
从0到1,从0到1(1)从0到1(2)

虽然我是一个接口的菜鸟,但我还是有一颗愿意分享给大家的心,大家轻喷。

结构

.
├── 业务数据驱动.xml
├── 各种环境切换.xml
├── README.md
├── 账号管理.xml
├── pom.xml
├── src
│   ├── main
│   │   └── java
│   │       └── com
│   │           └── monkey
│   │               └── app
│   │                   └── my_rest_test
│   │                       └── App.java
│   └── test
│       ├── java
│       │   └── com
│       │       └── musical
│       │           ├── 业务模块1
│       │           │   ├── Time
│       │           │   │   ├── 业务模块接口定义.java
│       │           │   │   ├── 业务模块实现.java
│       │           │   │   └── 测试用例.java
│       │           │   └── utils
│       │           │       ├── 加密.java
│       │           │       ├── TestngDataProvider.java
│       │           │       ├── AssertUtils.java
│       │           │       ├── Base64.java
│       │           │       ├── 解密.java
│       │           │       ├── JsonUtils.java
│       │           │       ├── ParameterDataProvider.java
│       │           │       ├── 解析xml.java
│       │           │       ├── RequestsUtil.java
│       └── resources
│           ├── 业务1.JSON
│           ├── 业务2.JSON
│           ├── 业务3.JSON
│           ├── ....JSON
├── target
│   ├── classes
│   └── test-classes
│       ├── 业务1.JSON
│       ├── 业务2.JSON
│       ├── 业务3.JSON
│       ├── .....JSON
│   ├── passed.png
│   ├── skipped.png
│   ├── testng-failed.xml
│   ├── testng-reports.css
│   ├── testng-reports.js
│   ├── testng-results.xml
│   └── testng.css
└── testNG.xml

基础设计

由于开始就说好是TestAssured,所以我们看下基础的设计

public class BaseTest {

    @BeforeMethod
    public void setUp() {
        RestAssured.baseURI = ParserConfig.getInstance().getBaseURI();
        // RestAssured.port = 8080;
        RestAssured.basePath = "";
        RestAssured.defaultParser = Parser.JSON;

    }

public static String 接口1(参数1,参数2) {
return url_parm;
}


请求+断言实现
---
* Post,Get等方法都一样


```java
    public static void AssertJSONStructurePost(String CookieType, String Cookie, int statusCode, String url,
            String JSON_Name) {
        given().log().all().header(CookieType, Cookie).expect().statusCode(statusCode).when().post(url).then()
                .assertThat().body(matchesJsonSchemaInClasspath(JSON_Name));
    }
  • online等方法也一样如下
    public static void AssertJSONStructureOnlinePut(String baseURI, String basePath, String Cookie_type, String Cookie,
            String url, String JSON_Name) {
        String request_url = baseURI + basePath;
        try {
            JSONObject encryptJson = EncryptUtils.createHeader(Cookie, request_url, "请求方式");

            given().log().all().header(Cookie_type, Cookie)
                    .header("key1", encryptJson.get("value1"))
                    .header("key2", encryptJson.get("value2"))
                    .header("key3", encryptJson.get("value3"))
                    .header("key4", encryptJson.get("value4")).expect()
                    .statusCode(200).when().get(url).then().assertThat().body(matchesJsonSchemaInClasspath(JSON_Name));
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

验证

当然作为API第一步先验证的是结构,就如同我之前上面的方法名写的,所以在我架构这个工程的时候会有很多的.JSON文件,这个就是为了来验证json结构的。
比如我们又一个返回

{
  "A": true,
  "B": false,
  "C": {
    "D": false,
    "E": "testerhome",
    "F": false,
    "G": false,
    "H": false
  },
  "I": 1463990673992,
  "J": false
}

所以我们的.JSON就是

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "A": {
      "type": "boolean"
    },
    "B": {
      "type": "boolean"
    },
    "C": {
      "type": "object",
      "properties": {
        "D": {
          "type": "boolean"
        },
        "E": {
          "type": "string"
        },
        "F": {
          "type": "boolean"
        },
        "G": {
          "type": "boolean"
        },
        "H": {
          "type": "boolean"
        }
      },
      "required": [
        "D",
        "E",
        "F",
        "G",
        "H"
      ]
    },
    "I": {
      "type": "integer"
    },
    "J": {
      "type": "boolean"
    }
  },
  "required": [
    "A",
    "B",
    "C",
    "I",
    "J"
  ]
}

那么所有的API第一步就会通过json的结构验证。之后还会有业务对应的Value验证,会有业务组合以及数据库的验证。持续学习中

PS:
最后补一个如果报错的话出现的info,还是不错的。

Response body doesn't match expectation.
Expected: The content to match the given JSON schema.
error: object has missing required properties (["A","B"])
   level: "error"
   schema: {"loadingURI":"xxxxx.JSON>#","pointer"}
   instance: {"pointer":"/result"}
   domain: "validation"
   keyword: "required"
   required: ["A","B","C","D","E","F","G","H","I","J","K","L","M","N"]
   missing: ["A","C"]

发表评论

电子邮件地址不会被公开。 必填项已用*标注