rest api测试

Rester的Python项目详细描述


rester
==
用于测试restful api的框架
*rester*受到各种单元测试框架(如junit、"unittest"(python)等)的启发,在概念上与这些框架类似,但面向测试restful api端点。使用*rester*,所有测试都是用json指定的,因此也可以由非程序员使用。


测试restful api通常涉及两个可预测的步骤-

-调用api端点
-验证响应头、有效负载等

大多数可用于测试restful api的测试工具都使用某种基于gui的方法,这种方法不适合重用,更好的代码组织、抽象等,以及一些其他的好处,这些好处通常可以通过更多的编程框架(如junit)获得。以编程方式构建测试用例提供了最高级别的灵活性和复杂性,但这种方法的缺点是它最终会产生大量相当乏味和重复的代码。从概念上讲,rester类似于现有的单元测试框架,但它使用json(而不是编程语言)来实现/指定实际的测试。它可以被程序员和非程序员使用,但是可以获得unittesting框架的所有好处。




注意:目前rester只支持不需要显式验证调用的api,但是将来的版本将支持oauth。创建rester主要是为了测试内部restfulapi,这些api通常不需要对调用进行身份验证。也,rester只支持json响应的验证。

rester的实际使用
-对内部和外部restful api端点执行"集成"测试
-检查和测试复杂的响应有效负载
-您只需使用rester转储和分析api响应-头文件,有效载荷等

假设
-rester不管理暴露api端点的容器或服务器的生命周期,但假设api端点(待测试)是可用的。
-但与其他unittesting框架不同,rester确实保证了**testcase**中**teststeps**的执行顺序。要更好地理解测试步骤和测试用例,请参见下面的"一般概念"部分。如果您想测试一系列以特定方式修改系统状态的api端点(依次调用),那么**排序**将非常有用。



\general concepts

**testsuite**:
*testsuite*是*testcases*的集合。这个想法是将相关的"测试用例"组合在一起。

``
{
"测试用例":[
"测试用例1.json"、
"测试用例2.json"
]
}
```

***测试用例**:
一个*测试用例*包含一个或多个*测试步骤*。您可以声明**globals**变量,以便在测试步骤中重复使用。有关所有选项的更完整列表,请参见-


````
{
"name":"测试用例x"、
"全局":{
"变量":{
"基API URL":"https://example/api/v1"、
"API密钥":"xxxx"
}
}、"测试步骤":[
{
…每个测试步骤都在这里指定。每个测试步骤都在这里指定:
}
]
```

***测试步骤**:
所有操作都在**测试步骤**中进行。
有关所有选项的更完整列表,请参阅。

teststep包含以下-

-**api端点调用**-作为api端点调用的一部分,您可以提供以下参数-
-url
-http headers
-url params
-http method-get、put、post,delete('get'默认使用)


-作为**assertmap的一部分指定的一系列assert语句**
-后步骤分配


测试步骤示例:

`````
teststeps:[
{
"name":"测试步骤的名称",
"apiurl":"http://example/api/v1/hello world/print",
"assertmap":{
"headers":{
"content type":"application/json;charset=utf-8"
}
"payload":{
"message":"你好,世界!"
}
}
}
]
````

***当前目录中的test_case.json***
-运行特定的测试用例
使用命令行选项***--tc=<;file_name>;***

例如,调用文件中指定的测试用例"./rester/examples/test_case.json"

`apirunner--tc=./rester/examples/test_case.json`

-运行特定的测试套件
使用命令行选项***--ts=<;file_name>;***

例如,调用文件中指定的测试套件"./rester/examples/test_suite.json"

`apirunner--ts=./rester/examples/test_suite.json`


其他命令行选项
-调整日志输出或详细信息
rester支持不同级别的日志-调试、信息,警告,错误。可以使用命令行选项指定级别***--log=<;level>;***

例如,运行信息级别

`apirunner--log=info`

-只转储json输出

请求
```
测试步骤:[
{
"名称":"测试步骤名称",
"apiURL":"http://example/api/v1/helloworld/print",
"headers":{
"content type":"application/json;
},

}
]
```

-指定url参数作为api请求的一部分。
有两种方法可以指定url参数,如下所述-

```
teststeps:[
{
"name":"teststep的名称",
"apiurl":"http://example/api/v1/helloworld/print",
"headers":{

},
"params":{
"param-1":"value1",
"param-2":"value2"


}
]
```



````
测试步骤:[
{
"名称":"测试步骤的名称",
"apiURL":"http://example/api/v1/helloworld/print?param_1=value1¶m_2=value2",

}
]
`````

-执行http post
````
>测试步骤:[
{
"name":"测试步骤的名称",
"apiurl":"http://example/api/v1/helloworld/print",
"headers":{

},
"method":"post"
"params":{
"param-1":"value1",
"param-2":"value2"
},

}
]
```

前面提到的assert语句示例
,所有assert语句都是在**assertmap**元素中指定的

-assert"content type"http header
````
teststeps:[
{
"name":"name of teststep",
"apiurl":"http://example/api/v1/helloworld/print?"param_1=value1¶m_2=value2",

}


"assertmap":{

"headers":{
"content type":"application/json;charset=utf-8"
},

….

}
]


-断言特定有效载荷元素-
"output.level"是2
"output.result"是eqal到"messa"GE Success"
"output.status"大于3

````
测试步骤:[
{
"name":"测试步骤的名称",
"apiURL":"http://example/api/v1/helloworld/print?"param_1=value1¶m_2=value2",

}


"assertmap":{
"headers":{

},

"payload":{
"output.level":2,
"output.result":"消息成功",
"output.status":"-gt3",
},
..

>
>>
>




>-**-gt**-大于


>
>
>>
>
>







>>
>
>
>
>>
>>>
>>>
>>>>>
>>
>>

>>
>
```
,例如parent.child>;=3


"payload":{
"parent.child":"-g e 3",
}
````

-**-lt**-小于

```

2

"有效载荷":{
"parent.child":"-lt 2"、
}
````

-**-le**-小于eqal到

````


例如parent.child<;=2

"有效载荷":{
"parent.child":"-le 2"、
```
-**-ne**-不是例如,parent.child.message!="success"

"payload":{
"parent.child.message":"-ne success",
}
````

-**-eq**-eqal to

```
```
,例如parent.child.message=="error"
"payload":{
"parent.child.message":"-eq success",#两者都可以
"parent.child.message":"成功",
}
````




"规则密钥":"配置密钥"
}
},

测试步骤:[
{
"名称":"测试步骤名称",
"apiurl":"http://{baseapiurl}/api/v1/helloworld/print?param_1=value1

}
]
````

todo
-单元测试
-大量重构:—)
-更清晰的测试结果摘要(表格?)
-支持简单数据类型-列表、整数、字符串等
-支持JSON模式验证
-支持枚举
-支持OAuth
-使用YAML格式指定测试

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用McClickListener单击了什么元素   Java时间戳在Oracle时间戳中不同情况下存储12 PM的奇怪行为   java无法使用事件总线对运行在不同机器上的垂直体进行通信   java Mockserver:收到请求后进行回调   java无法将Json字符串转换为Map<string,Object>   java如何按升序排列输出?   java视图行,带有oracle键。jbo。在SrCategoryParentIterator中找不到键[300100120394155]   javafxmysql连接示例   java正在等待加载完成   java是否可以将同一个有状态会话bean实例注入多个其他会话bean?   java无法让万向节检测离开或进入区域   使用JavaCV和OpenCV的java提供了dyld:lazy符号绑定失败:找不到符号:__sincos_stret   xml解析无法使用Java读取xml文档   java无法更改工具栏的颜色   javaapachesshd和JSCH   java无法在firebase存储中检索图像url   java问题与executeUpdate   同一应用程序中不同活动之间的java SharedReference