jmeter--基于http+json接口的功能测试

测试项目叫做smile_task,简称sm_task。这是一个基于nodejs超简单的todo list,sm_task没有任何UI界面(纯接口),比较适合对接口测试进行学习了解。不过在进行接口测试之前,需要安装smile_task运行的环境:

  • mysql
  • node 下载.msi版本,注意64位和32位的区别
  • cnpm(中国版nodejs的包管理器)

配置开发环境

安装coffee-script(可以通过coffee-script的语法来写javascript,coffee-script的终极目的就是将coffee-script脚本编译成javascript) and sequelize-cli (sequelize是一个orm库,通过sequelize-cli我们可以全局运行sequelize的migrate命令)

cnpm install -g coffee-script
cnpm install -g sequelize-cli

clone源码及安装依赖

git clone https://github.com/easonhan007/express_api_demo.git
cd express_api_demo
npm install #or cnpm install

配置数据库

  • 修改config/config.json中的数据库配置
  • 创建名为smile_task_development的数据库
sequelize db:migrate

运行

npm start

 

 

一、API:

smile_task提供了下面的一些api

1、无需鉴权

  • POST /login username/password # 登录
  • POST /register username/password/password_confirmation # 用户注册

2、需要鉴权

  • GET /api/tasks # 获取所有的task
  • GET /api/tastks/:task_id # 获取id为task_id的task
  • POST /api/tasks title/desc # 创建task
  • DELETE /api/tasks/:task_id # 删除id为task_id的task
  • PUT /api/tasks/:task_id # 完成id为task_id的task

二、jmeter示例:

1、用户注册

1.1、步骤详情:

"""
1、新建一个build-web-test-plan,删除线程组下除配置元件外的所有组件
2、在HTTP Request Defaults中填写smile_task服务器IP,Port
3、在线程组下新建Random Variable配置元件(名称: username、Variable Name: username、Output Format: user_000、Minimum Value: 1、Maximum Value: 999)
4、新建一个事务控制器,名称:case-注册
5、在事务控制器下,新建一个HTTP请求(名称: 注册、路径: /register、请求参数:
username: ${username}、password: ${username}、password_confirmation: ${username})
6、在线程组下添加1个查看结果树(ctrl+9)
7、在线程组下添加1个Debug Sample(ctrl+8)
8、将线程组中的所有数值改成1,点击运行
"""

2.2、效果图:

3、如上图所示,在接口调试完毕后,可以在HTTP请求下新增后置处理器和断言(还可以考虑一些异常场景的case):

后置处理器获取用户名:

在"注册"这个HTTP请求下新建JSON PATH PostProcessor

  • 名称: 获取注册成功后返回的用户名
  • Variable names: returned_username
  • JSON Path expressions: $.username
  • Match Numbers: 1
  • Default Value: NOT FOUND

断言1 用户名不能为空:

新建JSR223 Assertion

  • 名称: 用户名不能为空
  • Language: javascript
  • Script:
 var returned_username = vars.get('returned_username');

  if(returned_username == 'NOT FOUND'){
AssertionResult.setFailure(true);
AssertionResult.setFailureMessage('没有返回用户名');
}

断言2 返回用户名不正确:

新建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('返回的用户名不正确');
}

  

2、用户登陆

1、步骤详情:

"""
1、新建一个事务控制器,名称:cese-登陆
2、在事务控制器下,新建一个HTTP请求,名称login:(方法:post、路径:/login 参数:username:username :${returned_username}、password:${returned_username})
3、在login请求下新增一个后置处理器:JOSN Extractor(名称: 获取token、Variable names: returned_username、JSON Path expressions: $.username、Match Numbers: 1、Default Value: NOT FOUND)
4、在线程组下添加1个查看结果树(ctrl+9)
5、在线程组下添加1个Debug Sample(ctrl+8)
6、点击运行
"""

2、效果图:

3、创建任务、完成任务、删除任务、查看所有任务

1、步骤详情:

"""
后续这几个任务都需要鉴权(用户登陆时返回的token),才能通过服务器的认证,从而进行任务,因此需要从新设置一个HTTP信息头管理来接收保存token(Authorization: Bearer ${login_token}) 创建任务:
1、新建一个事务控制器,名称:cese-创建 tasks
2、在事务控制器下,新建一个HTTP请求,名称POST tasks:(方法:POST、路径:/api/tasks 参数:title:${__RandomString(5, abcdefghijklmnopqrstuvwxyz)}、desc :${__RandomString(10, abcdefghijklmnopqrstuvwxyz)} )
3、在POST tasks请求下新增一个后置处理器:JOSN Extractor(名称: 获取task id、Variable names: task_id、JSON Path expressions: $.id、Match Numbers: 1、Default Value: NOT FOUND)
4、在线程组下添加1个查看结果树(ctrl+9)
5、在线程组下添加1个Debug Sample(ctrl+8) 完成任务:
1、新建一个事务控制器,名称:cese-完成 tasks
2、在事务控制器下,新建一个HTTP请求,名称PUT tasks:(方法:PUT、路径:/api/tasks/:${task_id}
3、在线程组下添加1个查看结果树(ctrl+9)
4、在线程组下添加1个Debug Sample(ctrl+8) 删除任务:
1、新建一个事务控制器,名称:cese-删除 tasks
2、在事务控制器下,新建一个HTTP请求,名称DELETE tasks:(方法:DELETE、路径:/api/tasks/:${task_id}
3、在线程组下添加1个查看结果树(ctrl+9)
4、在线程组下添加1个Debug Sample(ctrl+8) 查看所有任务:
1、新建一个事务控制器,名称:cese-查看所有 tasks
2、在事务控制器下,新建一个HTTP请求,名称GET tasks:(方法:GET、路径:/api/tasks}
3、在线程组下添加1个查看结果树(ctrl+9)
4、在线程组下添加1个Debug Sample(ctrl+8) """

2、效果图:

PS:默认情况下鉴权是关闭的。请确保app.coffee中的app.use(express_jwt(secret: jwt_secret).unless(path: ['/register', '/login']))的这条语句没有被注释,然后使用coffee -c app.coffee重新编译。

jmeter--基于http+json接口的功能测试的更多相关文章

  1. atitit.基于http json api 接口设计 最佳实践 总结o7

    atitit.基于http  json  api 接口设计 最佳实践 总结o7 1. 需求:::服务器and android 端接口通讯 2 2. 接口开发的要点 2 2.1. 普通参数 meth,p ...

  2. 基于jmeter和shell的接口性能自动化

    基于jmeter和shell的接口性能自动化 1. 总体需求 由于性能测试中涉及的查询接口多,版本迭代频繁,版本更新后自动跑一轮查询业务的性能,可以及时发现一些开发修复bug触发的非预期的bug,利用 ...

  3. Jmeter笔记(Ⅱ)使用Jmeter实现轻量级的接口自动化测试

    接口测试虽然作为版本的一环,但是也是有一套完整的体系,有接口的功能测试.性能测试.安全测试:同时,由于接口的特性,接口的自动化低成本高收益的,使用一些开源工具或一些轻量级的方法,在测试用例开发的成本不 ...

  4. Loadrunner模拟JSON接口请求进行测试

    Loadrunner模拟JSON接口请求进行测试     一.loadrunner脚本创建 1.Insert - New step -选择Custom Request -  web_custom_re ...

  5. JMeter之Http协议接口性能测试

    一.不同角色眼中的接口 1.1,开发人员眼中的接口    1.2,测试人员眼中的接口 二.Http协议基本介绍 2.1,常见的接口协议 1.:2. :3. :4.:5.: 6. 2.2,Http协议栈 ...

  6. 基于注解的接口限流+统一session认证

    代码心得: 一个基本的做法:对于用户身份认证做到拦截器里,针对HandlerMethod进行统一拦截认证,根据方法上的注解标识,判别是否需要身份验证,并将查找出来的User实体存入ThreadLoca ...

  7. 基于HttpRunner的接口自动化测试平台HttpRunnerManager(二)

    https://github.com/HttpRunner/HttpRunnerManager HttpRunnerManager Design Philosophy 基于HttpRunner的接口自 ...

  8. Jmeter实时监控+SpringBoot接口性能实战

    性能测试 Jmeter实时监控+SpringBoot接口性能实战 自动化 SpringBoot Java Jmeter实时监控+SpringBoot接口性能实战 一.实验目的及实验环境 1.1.实验目 ...

  9. ASP.NET Core WebApi基于JWT实现接口授权验证

    一.ASP.Net Core WebApi JWT课程前言 我们知道,http协议本身是一种无状态的协议,而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证,那么下一次请求时,用户还要再 ...

随机推荐

  1. 【转】Linux 中清空或删除大文件内容的五种方法(truncate 命令清空文件)

    原文: http://www.jb51.net/article/100462.htm truncate -s 0 access.log -------------------------------- ...

  2. 使用json-server搭建模拟api接口

    转载:http://blog.csdn.net/adojayfan/article/details/55011674 作为前端和客户端开发人员,在后端还没有给出对应的api接口时,我们无法做测试. 这 ...

  3. Java的位运算

    左移位操作 左移位运算的符号为[<<],左移位运算符左面的操作元称作被移位数,右面的操作数称作移位量. 左移位运算是双目运算符,操作元必须是整型类型的数据,其移动过程是:[a <&l ...

  4. laravel性能优化技巧(转)

    说明 性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能. 接下来分享一些开发的最佳实践,还有调优技巧,大家有别的建议也欢迎留言讨论. 这里是简单的列表 ...

  5. Android应用程序快速更换包名的方法

    今天遇到需要修改Android包名的问题,开始试了直接修改包名,会出现一些错误 1.layout中直接引用类的地方 2.Manifest中对gen定义的地方 经测试,总结出一下方法: 1.关闭自动编译 ...

  6. react-native 创建 ios 项目

    创建React-Native项目 打开终端输入react-native init ProjectName,这里的ProjectName可以改成你想创建的项目名称.然后有两种方法启动项目 1.从终端开启 ...

  7. HBase数据同步到ElasticSearch的方案

    ElasticSearch的River机制 ElasticSearch自身提供了一个River机制,用于同步数据. 这里能够找到官方眼下推荐的River: http://www.elasticsear ...

  8. EFFECTIVE JAVA 类和接口

    第十六条:复合优先于继承 //这是一个不好的类---执行的结果 addCount = 4(addAll的实现依赖于HashSet的add方法,InstrumentHashSet方法重写了add方法有执 ...

  9. [译] JavaScript 的事件循环

    译者注 本译文基本是按原文的意思来翻译,但对于 JavaScript 的事件循环,个人感觉还是 Philip Roberts 的视频讲解更形象些,思路和本文大致相同,不过他把事件表理解为 Web AP ...

  10. svn client命令

    经常使用svn命令说明 1.从SVN仓库中检索出代码到工作拷贝: # svn checkout https://svn.sinaapp.com/appname [workcopy] 当中workcop ...