新用户注册
新用户注册的接口是POST /register username/password/password_confirmation
该接口需要提供3个参数,分别是
· username 用户名
· password 密码
· password_confirmation 重复一遍密码
我们现在的任务就是使用jmeter来测试新用户注册这个接口,如果该接口返回了新注册用户的信息,那么我们可以认为注册是成功了的,否则会出现各种报错。
步骤
1、在express_api_demo路径下使用npm start启动smile api的后台服务
2、在测试计划下新建一HTTP请求默认值
· 服务器名或IP:localhost
· 端口号: port
3、新建线程组(ctrl+0)
4、在线程组下新建Random Variable配置元件
· 名称: username
· Variable Name: username
· Output Format: user_000
· Minimum Value: 1
· Maximum Value: 999
5、新建HTTP请求取样器
· 名称: 注册
· 路径: /register
· 请求参数:
username: ${username}
password: ${username}
password_confirmation: ${username}
1、在线程组下添加1个查看结果树(ctrl+9)
2、在线程组下添加1个Debug Sample(ctrl+8)
3、保存并运行,结果如下图所示
断言
我们现在已经调通了接口,下面就可以给接口做断言了。
该接口的输入是
· username
· password
· password_confirmation
输出是
· id: 数据库中的id
· username
· password: 密文的
· updatedAt: 修改时间
· createdAt: 创建时间
{ "id":7, "username":"user_527", "password":"$2a$10$VynjsNb8BwvTsKBRJ68/MObtKYLhtK7TrKxjfWrtufoOOO/yS5qZu", "updatedAt":"2016-09-09T09:29:36.000Z", "createdAt":"2016-09-09T09:29:36.000Z" } |
很容易想到,我们的断言可以判断下面几件事情
· 创建成功后返回的json字符串里应该包含username这个key
· 创建成功后返回的json字符串里username这个key的值应该跟我们随机生成的用户名是一致的
下面我们就开始添加这些断言
在"注册"这个HTTP请求下新建JSON PATH PostProcessor
· 名称: 获取注册成功后返回的用户名
· Variable names: returned_username
· JSON Path expressions: $.username
· Match Numbers: 1
· Default Value: NOT FOUND
新建JSR223 Assertion
· 名称: 用户名不能为空
· Language: javascript
· Script:
var returned_username = vars.get('returned_username'); if(returned_username == 'NOT FOUND'){ AssertionResult.setFailure(true); AssertionResult.setFailureMessage('没有返回用户名'); } |
新建JSR223 Assertion
· 名称: 用户名应该是正确的
· Language: javascript
· Script:
var returned_username = vars.get('returned_username'); var expected_username = vars.get('username'); if(returned_username != expected_username){ AssertionResult.setFailure(true); AssertionResult.setFailureMessage('返回的用户名不正确'); } |
因为断言通过的时候我们是没有办法在查看结果树里看到断言的信息的,所以我们需要故意让断言不通过来测试断言的准确性。
将"注册"HTTP请求中的password参数改为secret
保存并运行,结果如下图所示:
这就证明在注册失败的时候,断言也相应失败了,断言的行为是准确的。
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。