python关于seldom框架的整理
seldom的安装
直接pip install seldom 然后安装完成之后可以 利用pip show seldom 来看安装的版本以及一些信息
seldom来编写请求
import seldom from seldom.utils import cache from tokener import Cache class TestRequest(seldom.TestCase): """ 测试用例的类 """ def start(self): """ 类似初始化 :return: """ self.url = "http://localhost:8000/api/docs" # 调用tokener文件中的 设置缓存类 Cache.set_cache() # 从缓存中获取到需要的token self.token = cache.get("access_token") self.headers = { "Content-Type": "application/json", "Authorization": f"Bearer {self.token}" } def test_case(self): # self 直接拿上面的token self.get(self.url, params={}, headers=self.headers) self.assertStatusCode(200) def test_creat_project(self): body = { "name": "string", "address": "string", "cover_name": "string", "path_name": "string" } self.post(self.url, json=body, headers=self.headers) self.assertStatusCode(200) print(self.response) if __name__ == '__main__': # 单独debug方式,采用是case=py文件名称接测试类接具体运行的函数 # 不需要生成测试报告就debug=True seldom.main(case='demo.TestRequest.test_case', debug=True) # 默认debug=False # seldom.main(case='demo.TestRequest.test_case') # 运行所有 # seldom.main()
在做接口测试时,经常需要进行鉴权,也就是token验证,那么可以利用seldom中cache 来自己设置,类似于你新建了一个文件专门来存放这个token的
cache的方便之处是可以随时进行读取,在运行测试类是在初始化的时候可以 先调用设置chche的方式来保证,后续所有的case 都可以直接利用上面的token
from seldom.utils import cache class Cache: """ 先初始化删除缓存中所有的内容 """ def __init__(self): cache.clear() @staticmethod def set_cache(): """ 重新设置缓存里面的内容 作用是,当进行接口测试时,需要用到token,可以利用该缓存方式 :return: """ cache.set({"client_id": "123456"}) cache.set({"client_secret": "37D5211D-404B-69D2-7482-D04CAD601281"}) cache.set({"access_token": "base64_str"})
这个 access_token 就是接口需要的token,当然不是写死的,在设置之前可以先请求一次获取token的接口来拿到token,然后再写入缓存。自此cache就设置成功。
前面的 client_id、client_secret是我的项目需要的东西。设置成功之后在测试用例类里面 start方法里面先请求一下这个类, 也就是 Cache.set_cache()
然后随意取用。 以上是token的使用方式,以及get请求发起方式,类似unittest seldom 好用之处是这个缓存和断言,发起请求只需 self.post 或者self.get
seldom的断言
main() 方法
main()方法是seldom运行测试的入口, 它提供了一些最基本也是重要的配置。
import seldom # ... if __name__ == '__main__': seldom.main(path="./", browser="chrome", base_url=None, report=None, title="百度测试用例", tester="虫师", description="测试环境:chrome", debug=False, rerun=0, save_last_run=False, language="en", timeout=None, whitelist=[], blacklist=[] )
参数说明
- path : 指定测试目录或文件, 与
case参数互斥。 - case : 指定测试用例, 与
path参数互斥。 - browser : 针对Web UI测试需要指定浏览器("chrome"、"firefox" 等)。
- base_url : 针对HTTP接口测试的参数,设置全局的URL。
- report : 自定义测试报告的名称,默认格式为
2020_04_04_11_55_20_result.html。 - title : 指定测试报告标题。
- tester : 指定测试人员, 默认
Anonymous。 - description : 指定测试报告描述。
- debug : debug模式,设置为True不生成测试HTML测试,默认为
False。 - rerun : 设置失败重新运行次数,默认为
0。 - save_last_run : 设置只保存最后一次的结果,默认为
False。 - language : 设置HTML报告中英文,默认
en, 中文zh-CN。 - timeout : 设置超时时间,默认
10秒。 - whitelist : 用例标签(label)设置白名单。
- blacklist : 用例标签(label)设置黑名单
当一个接口返回如下:需要断言args时
{ "args": { "hobby": [ "basketball", "swim" ], "name": "tom" }, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Host": "httpbin.org", "User-Agent": "python-requests/2.25.0", "X-Amzn-Trace-Id": "Root=1-62851614-1ca9fdb276238c60406c118f" }, "origin": "113.87.15.99", "url": "http://httpbin.org/get?name=tom&hobby=basketball&hobby=swim" }
import seldom class TestAPI(seldom.TestCase): def test_assert_json(self): # 接口参数 payload = {"name": "tom", "hobby": ["basketball", "swim"]} # 接口调用 self.get("http://httpbin.org/get", params=payload) # 断言数据 assert_data = { "hobby": ["swim", "basketball"], "name": "tom" } self.assertJSON(assert_data, self.response["args"])
self.assertJSON(assert_data, self.response["args"]) 很方便的
相对于unittest要简化很多。
#接口返回数据如下
{ "args": { "hobby": ["basketball", "swim"], "name": "tom" } } #seldom中可以通过path进行断言: import seldom class TestAPI(seldom.TestCase): def test_assert_path(self): payload = {'name': 'tom', 'hobby': ['basketball', 'swim']} self.get("http://httpbin.org/get", params=payload) self.assertPath("args.name", "tom") self.assertPath("args.hobby[0]", "basketball") self.assertInPath("args.hobby[0]", "ball")
#数据驱动 #seldom本来就提供的有强大的数据驱动,拿来做接口测试非常方便。 @data import seldom from seldom import data class TestDDT(seldom.TestCase): @data([ ("key1", 'value1'), ("key2", 'value2'), ("key3", 'value3') ]) def test_data(self, key, value): """ Data-Driver Tests """ payload = {key: value} self.post("/post", data=payload) self.assertStatusCode(200) self.assertEqual(self.response["form"][key], value) @file_data 创建data.json数据文件 { "login": [ ["admin", "admin123"], ["guest", "guest123"] ] } 通过file_data实现数据驱动。 import seldom from seldom import file_data class TestDDT(seldom.TestCase): @file_data("data.json", key="login") def test_data(self, username, password): """ Data-Driver Tests """ payload = {username: password} self.post("http://httpbin.org/post", data=payload) self.assertStatusCode(200) self.assertEqual(self.response["form"][username], password)

浙公网安备 33010602011771号