使用Taurus测试登录操作
execution:
-
concurrency: 5
ramp-up: 5
hold-for: 1m
scenario: Buyer-logs-in
scenarios:
Buyer-logs-in:
variables:
baseurl: http://localhost:3000
default-address: ${baseurl}
data-sources:
- path: './login.csv'
delimeter: ','
variable-names: userName, password
keepalive: true
retrieve-resources: false
requests:
- url: 'http://localhost:3000/login'
label: login
method: POST
body:
user[email]: {userName}
user[password]: {password}
assert:
- contains:
- 200
subject: http-code
- url: 'http://localhost:3000/action'
label: page1
method: GET
assert:
- contains:
- 200
subject: http-code
这是我的示例Taurus代码,用于模拟登录并衡量性能。
在我的应用中,一次只能有一个用户登录,而我的csv文件有2个用户。当我将并发设置为5并且Taurus说5个用户登录时,该测试仍然有效。这怎么可能。当同一用户再次登录时,他将被踢出登录的第一个浏览器。那么,如果有2个用户登录,那么Tuarus如何模拟5个用户?
有了这个问题,金牛座真的使用我在csv文件中提供的凭据登录吗?还是应该使用硒/金牛座来模拟它?
真正让我感到困惑的是,当我删除csv文件中的所有用户时,测试仍然没有为我提供200登录名和page1。
TIA
答案 0 :(得分:1)
如果您未指定executor
,金牛座将使用jmeter
as default,这意味着您的YAML配置将转换为Apache JMeter测试计划
您可以通过运行bzt your-test.yaml -gui
命令来查看生成的测试计划
data-sources
被翻译为CSV Data Set Config,看起来像:
这意味着每个线程(虚拟用户)每次迭代都会从CSV文件中获取新值,例如:
我不这么认为,您正在从CSV文件中读取凭据,但未在任何地方使用它,JMeter Variables的正确语法为${variable_name_here}
,因此您需要设置登录请求正文至:
user[email]: ${userName}
user[password]: ${password}
只要您正确configure JMeter to behave like a real browser,就无需使用硒
由于您的Response Assertion并没有做很多有用的工作,您可能会得到假阳性结果,JMeter会自动认为HTTP Status Codes在400以下是成功的。因此,与其检查状态码,不如建议您验证使用情况是否已登录,即“欢迎”消息存在,或者API响应包含一些用于成功登录的特定文本和/或不包含错误。