本章主要讲述pycharm中,利用【Robotframework】进行api自动化用例编写
其中重点是 【自定义关键字/自定义类库/参数化数据】 的使用,大家把这个搞懂了,robot基本就掌握的差不多了,接下来我就打算搭建整个项目了
如果有问题评论或私信都可
- 关于pycharm集成部分,上篇blog中已经讲解,详细请看:
https://blog.csdn.net/Makasa/article/details/125752741?spm=1001.2014.3001.5502
一、相关依赖下载
pip install -U requests pip install -U robotframework-requests
二、api用例编写
- robotframework-request :https://github.com/MarketSquare/robotframework-requests#readme
- 关键字查询:http://marketsquare.github.io/robotframework-requests/doc/RequestsLibrary.html
1、简单api用例编写
-
后台服务:http://192.168.3.105:8888,是我之前搭建的【测试平台】的本地服务,大家可以自行更换地址,如果想实现和我这篇博客一样的效果,可以先看看我之前搭建 【测试平台后端】 的文章,代码已上传github,可以把代码拉下来i自己跑一下
测试平台搭建专栏:https://blog.csdn.net/makasa/category_11904938.html?spm=1001.2014.3001.5482
- 注意:断言部分,我简单优化了下,判断返回值状态码,所以需要导入Collections包
*** Settings ***
Library RequestsLibrary
Library Collections
*** Test Cases ***
Case-001
[Documentation] Post请求_新增测试用例
Create Session api http://192.168.3.105:8888
${headers}= Create Dictionary Content-Type=application/json
${json}= Create Dictionary id=2 case_title=测试用例2 remark=测试用例2
${resp}= POST On Session api /testcase json=${json} headers=${headers}
${code}= Get From Dictionary ${resp.json()} code
Should Be Equal As Strings ${code} 0
Case-002
[Documentation] Get请求_查询测试用例
Create Session api http://192.168.3.105:8888
${header}= Create Dictionary Content-Type=application/json
${params}= Create Dictionary id=2
${resp}= GET On Session api /testcase params=${params}
${code}= Get From Dictionary ${resp.json()} code
Should Be Equal As Strings ${code} 0
2、自定义关键字api用例编写
- 和UI自动化用例一样,我这边也只是写一个很简单的例子,重点还是思路哈
- 注意:断言部分,我简单优化了下,判断返回值状态码,所以需要导入Collections包
*** Settings ***
Library RequestsLibrary
Library Collections
Suite Setup Link To
Test Template Add
*** Test Cases ***
add testcase1 1 测试用例1 测试用例1
add testcase2 2 测试用例2 测试用例2
add testcase3 3 测试用例3 测试用例3
*** Keywords ***
Link To
Create Session api http://192.168.3.105:8888
Add
[Arguments] ${id} ${case_title} ${remark}
${headers}= Create Dictionary Content-Type=application/json
${json}= Create Dictionary id=${id} case_title=${case_title} remark=${remark}
${resp}= POST On Session api /testcase json=${json} headers=${headers}
${code}= Get From Dictionary ${resp.json()} code
Should Be Equal As Strings ${code} 0
3、api编写之上下接口参数传递
- 一般情况下,在项目中,我们都需要拿到上个接口的返回值作为下个接口的传参,那这种情况下,我们该如何去编写用例呢,我在下面也写了一个比较简单的例子
简单说下场景,怕大家理解不了: --> 1、首先调用【查询测试用例接口】,然后目标是想要取得返回值的id --> 2、在获取返回值id,我们通过【自定义一个类库,并自定义关键字】,然后导入【自定义类库中的关键字】,拿到【测试用例list的第一个id值】 --> 3、然后将这个id存在全局变量中 --> 4、进行删除数据时,从全局变量中拿到这个【id】,传参传过去,进行删除3.1、自定义类库
- 之前说过,我们robotframework下载的扩展包统一是存在D:developPython36Libsite-packages下,那我们要自定义类库的话,就需要在这个路径下去进行创建
3.1.1、init.py
from MikasaTestLibrary.Util import util
__version__ = "1.0"
class MikasaTestLibrary(util):
"""
注意:这个类名一定要和扩展包的文件名一致
"""
ROBOT_LIBRARY_SCOPE = 'GLOBAL'
3.1.2、Util.py
- 这个类里面是我简单封装的方法
import requests
import json
"""
自定义类库的方法
"""
class util(object):
ROBOT_LIBRARY_SCOPE = 'Global'
def send_api(self, req, tools="requests"):
"""
对发送接口测试的工具进行封装(可以使用urlib3/requests)
:param tools:
:param req:
:return:
"""
if tools == "requests":
return requests.request(**req)
def get_testcase_list_first_id(self):
"""
拿到测试用例列表第一个id
:return:
"""
req = {
"method": "GET",
"url": "http://192.168.3.105:8888/testcase",
"params": {
}
}
res = self.send_api(req)
res_json = res.json()
first_id = res_json["msg"]["data"][0]["id"]
print("res_json:", res_json["msg"]["data"][0]["id"])
return first_id
3.2、robot用例编写
- 这里第二个用例的Get请求改一下改为Delete请求,我就懒得再改图片了
*** Settings ***
Library RequestsLibrary
Library Collections
Library MikasaTestLibrary
Suite Setup Link To
*** Test Cases ***
Get请求_查询测试用例
[Documentation] Get请求_查询测试用例
${header}= Create Dictionary Content-Type=application/json
${params}= Create Dictionary
${resp}= GET On Session api /testcase params=${params}
${code}= Get From Dictionary ${resp.json()} code
${first_id}= get_testcase_list_first_id
Should Be Equal As Strings ${code} 0
Set To Dictionary ${Global} id=${first_id}
Delete请求_删除测试用例
[Documentation] Delete请求_删除测试用例
${header}= Create Dictionary Content-Type=application/json
${first_id}= Get From Dictionary ${Global} id
${resp}= DELETe On Session api /testcase json=${first_id}
${code}= Get From Dictionary ${resp.json()} code
Should Be Equal As Strings ${code} 0
*** Keywords ***
Link To
${g}= Create Dictionary
Set Global Variable ${Global} ${g}
Create Session api http://192.168.3.105:8888
暑期编程PK赛
得CSDN机械键盘等精美礼品!


