感谢推荐,ApiTestEngine 也打算集成它来生成报告了
那个是单元测试里面初始化用户的,就是将所有已有的用户清除掉;因为只是用于单元测试,所以比较简单粗暴
预期结果响应是写到 validators 中,例子中有。
都会写的,毕竟是想做一个完整的开源项目,文档必须要全。
那只是因为我把实现细节写出来了,你要是不管原理只是使用,也不会觉得麻烦了
没有想吐槽的么
嗯,也许这就是软件工程跟计算机科学的差异所在吧
对于 swagger,之前有简单了解过,但没有实际使用过。想问一下,如果是没有接口文档的系统,或者接口文档采用其它形式描述的系统,要转为使用 swagger 的话成本高么?其实从 QA 的角度,的确也应该去推动做这些事情,但就还是得考虑实际的投入产出比。
1,web 化的确会大大提升易用性,要最终将测试平台推广到更多的项目,web 也是必要的;但是单纯对于一款接口测试框架来说,这更多的应该算是锦上添花的功能,所以前期可以考虑将数据结构规范化,快速地在项目中应用起来,在后期再扩展为 Web 平台;
2、接口文档标准化,很多时候真的是可遇而不可求,特别是在中途接手一个质量不是很高的项目的时候,接口文档滞后或甚至是没有。实现自动生成测试用例这块儿,不知道你们有没有成功实践经验,可否分享下?
3、赞同,也是这么做的。
4、mock api 这个,感觉更应该是专门的 Mock 平台的职责,要放到一个接口测试平台感觉比较牵强。
5、性能测试对于接口测试平台来说也是锦上添花的功能;不过经过设计(我是复用了 Locust),也可以实现接口测试用例和性能测试的复用,一份用例实现多个用途,也是不错的。
现在市面上的确是已经有了很多接口测试平台,但是不同公司不同项目的情况差异巨大,所以的确很难说哪款测试工具或平台是最好的。终究还是回到那句话,适合的才是最好的
嗯,能实现这样的话更好,但是在实际项目中实施起来比较难,除非是项目立项之初就有比较强的推动力
我明白你的意思,是要同一个测试用例,对应多个不同的测试数据对吧?
这块儿暂时还没有特殊处理,暂时还是以一个测试用例对应一种测试数据组合的形式。
后面的想法有考虑通过函数调用来获取测试数据,例如在特定范围内获取随机值,或者从数据库表中获取特定字段。
当前是这样的,测试数据与测试用例是一起的
好了,已经添加了
我看了下,貌似没有权限
用例编写方式,推荐的是YAML/JSON
的格式。写好后放置到任意文件夹中,然后通过如下方式执行即可。
$ python main.py --testcase-path TESTCASE_FOLDER
具体的使用方法部分我还在写。
数据提取方式这部分,我借鉴的是 pyresttest 框架的方式,你可以看下代码的单元测试中用到的例子。
def test_extract_response_json(self):
resp = requests.post(
url="http://127.0.0.1:5000/customize-response",
json={
'headers': {
'Content-Type': "application/json"
},
'body': {
'success': False,
"person": {
"name": {
"first_name": "Leo",
"last_name": "Lee",
},
"age": 29,
"cities": ["Guangzhou", "Shenzhen"]
}
}
}
)
extract_binds = {
"resp_status_code": "status_code",
"resp_headers_content_type": "headers.content-type",
"resp_content_body_success": "body.success",
"resp_content_content_success": "content.success",
"resp_content_text_success": "text.success",
"resp_content_person_first_name": "content.person.name.first_name",
"resp_content_cities_1": "content.person.cities.1"
}
resp_obj = response.ResponseObject(resp)
extract_binds_dict = resp_obj.extract_response(extract_binds)
self.assertEqual(
extract_binds_dict["resp_status_code"],
200
)
self.assertEqual(
extract_binds_dict["resp_headers_content_type"],
"application/json"
)
self.assertEqual(
extract_binds_dict["resp_content_content_success"],
False
)
self.assertEqual(
extract_binds_dict["resp_content_text_success"],
False
)
self.assertEqual(
extract_binds_dict["resp_content_person_first_name"],
"Leo"
)
self.assertEqual(
extract_binds_dict["resp_content_cities_1"],
"Shenzhen"
)
1、依赖没有完成的接口这种情况,这是是单独的 Mock Server 去处理的,不算是测试框架这块儿的职责;
2、当前推荐的是YAML/JSON
文本格式的用例配置;对于喜欢 GUI 的,也可以采用 Excel 来写,实现一个 CSV 转换器即可。
你说的依赖接口指的是这种情况么?B 接口的参数需要 A 接口返回的值。
针对这种情况,我的实现方式是,在用例配置的时候可以选择将接口返回结果的特性字段提取出来,绑定到一个变量中,然后后续接口请求就可以直接引用了。
卡斯大叔起得好早啊,膜拜
这些只是用来测试框架的数据而已。分别对应着不同的特性,例如单个测试用例,测试用例集。另外,由于代码比文档超前很多,很多特性还没来得及介绍。
是的,直接复用的,现在最新的代码已经有了这个特性了,只是还没写文档
而且再仔细看这个压测脚本实现方式,会发现模板性很强,所以这完全可以自动生成。也就是说,只需要维护一套YAML/JSON
格式的用例,就可以同时实现接口自动化和性能压测了。
roboframework 能实现压测么?先剧透下,APITestEngine 可以很好的实现哦,而且是直接基于同一份用例。
例如:
#coding: utf-8
import zmq
import os
from locust import HttpLocust, TaskSet, task
from ate import utils, runner
class WebPageTasks(TaskSet):
def on_start(self):
self.test_runner = runner.Runner(self.client)
self.testset = self.locust.testset
@task(weight=10)
def test_login(self):
results = self.test_runner.run_testset(self.testset)
assert results[0] == (True, [])
class WebPageUser(HttpLocust):
host = 'http://www.skypixel.com'
task_set = WebPageTasks
min_wait = 1000
max_wait = 5000
testcase_file_path = os.path.join(
os.getcwd(), 'testcases/skypixel/open_app.yml')
testsets = utils.load_testcases_by_path(testcase_file_path)
testset = testsets[0]
已经写得差不多了,只是还要疏通下逻辑
在项目根目录下,先运行下
$ python -m unittest discover
如果运行有问题,说明你的环境有问题。代码在各个版本下都是正常的。
手动点赞