在做web程序性能测试时,loadrunner和jmeter是两款常用的工具,两者比较起来,jmeter非常轻巧,且开源免费,上手快。这里简单介绍下jmeter的使用,以登录百度进行搜索为例。

jmeter运行需要jdk环境,这个不多做介绍。软件界面:

  1. 右击“测试计划”,添加一个线程组

    线程组界面可以配置线程的数量,“Ramp-Up Period(in seconds):"这个参数是

    配置这些线程组在多少时间内完全启动(可以把时间设置长点,这样防止一开始就对服务器造成很大压力),还可以配置循环次数,后面还有调度器配置。

  2. 分析一下登录百度的过程,首先访问http://www.baidu.com,百度分配给你一个baiduid的cookie;点击“登录”按钮,浏览器会带着相关参数和cookie去请求nsclick.baidu.com;之后百度为了防止csrf攻击(csrf详细解析见:http://www.yeetrack.com/?p=220),会给客户端发送一个token;其后输入username、password,浏览器将用户名、密码、token及相关参数post给passport.baidu.com进行校验,校验成功后,百度会分配给浏览器cookie,这里用的到的有SAVEUSERID和BDUSS两个,上面过程可以通过firefox的插件httpfox轻松得到(关于firefox的插件httpfox,详细见http://www.yeetrack.com/post/2012-11-22/firefox%2520httpfox%25E6%258F%2592%25E4%25BB%25B6)

  3. ok,开始了,在线程组内新建一个http请求, 填写域名、端口等信息

    访问百度后,服务器会立刻分配一个BAIDUID的cookie,我们需要提取这个cookie,完成后续的认证,右击这个http请求,添加一个正则表达式提取器

    它的页面应该类似这样填写:

    cookie在返回包中的消息头中,选中消息头,cookie 名字为BAIDUID,正则表达式用来匹配消息头中的cookie,http消息头中的cookie是这个样子:BAIDUID=EB8A76382372306096A079F34C1C84EA:FG=1; H_PS_PSSID=1690_1438_1541_1542_1662_1582,表达式BAIDUID=(.*); 可以提取出其中的cookie value(如果不了解正则表达式,可以参见:http://www.yeetrack.com/post/2012-11-02/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%EF%BC%88%E4%B8%80%EF%BC%89),下面的模板的意思是如果我们写的正则表达式匹配到了多条内容,我们去其中的第几个,如$1$就是取第一个,下面的缺省值指如果没有匹配到内容,就指定一个默认值,这里可以不填写。

  4. ok,下一步,点击百度页面右上角的“登录”,用httpfox或者浏览器自带的网络查看去找相应的参数。对应到jmeter中,就是再新建一个http请求,get方法。应该如下填写:

    参数共8个,要分别填写在表格里,其中有个参数t,指的是当前的Unix时间戳,jmeter提供一些函数,我们可以直接调用 ${__time()}这个就是调用jmeter的系统函数获取本地时间。

  5. 呃,忘了一步,第三步中我们用正则表达式,提取出了返回消息http头中的cookie,我们需要将这个cookie,放到jmeter的消息管理器中,这样在jmter在发送http请求时会自动带上相应cookie,右击“线程组”添加cookie管理器组件:

    添加完毕,进行配置,应该是这样样子的:

    名称是cookie 的key,要和http消息头中的名字对应;值是我们从正则表达式中提取的cookie value,${BAIDUID}是指取出BAIDUID这个变量的值(要和正则表达式页面的名字对应),下面两个是后面用到的。cookie的域和路径依次填好。

  6. 继续,我们点击了登录按钮,百度为了防止csrf攻击,会给我们一个token(这个token在我们提交密码时一起提交过去),我们要在jmeter中再新建一个http 请求,来获取这个token,get方法。相应参数如图:

    我们仍旧需要一个正则表达式来获取这个token,注意这个token并没有放在返回消息的http头中,而是在响应消息中的js代码中,故firefox中我们无法看到,这里我用的是burp suite这个工具(具体使用方法参见:http://www.yeetrack.com/?p=173),在看到那段javascript代码后,我们用正则表达式进行提取:

  7. 获取完这个token,我们就可以提交用户名和密码了。再次新建一个http请求,构造一个post请求,应该是这样:

    注意由于是https连接,故端口为443,参数一共16个,自己去firefox中依次查看并添加到表格中,这里对于ppui_logintime这个参数有些不明白,应该是和本地时间有关,不太确定,随便填写了一个,校验通过了,如果你有更深的理解,欢迎讨论。

    post请求之后,服务器校验用户名密码是否匹配,如果通过,服务器会发送cookie到浏览器,ok,再次用正则表达式提取,这次需要提取两个cookie,SAVEUSERID和BDUSS(不要忘记将这两个添加到cookie管理器中)

  8. OK ,至此登录动作结束,我们可以试验一下,运行之前我们先添加一个“查看结果树”来统计运行结果。

    点击中上方的运行按钮。你的结果应该类似这样:

    我们可以看到每个包的发送和相应情况,检查一下是否登录成功。看下面截图,返回消息为浏览器设置cookie,代码登录通过。

  9. 好了,登录成功,我们来提交个搜索的请求。新建一个http请求,如下图

    当然如果我们要搜索的关键词很多,也可以从外面的文件中读取,方法是:在线程组中添加一个csv data set config,这个组件专门用来读取外部的文本文件。

    keyword.txt中的关键字要用制定的字符隔开,这样在运行时文本中的关键字会被加载到keyword变量中,我们就可以在脚本中通过${keyword}来引用。

  10. 最后在添加上结果统计的组件,来分析web程序的性能。

    最后分享自己的脚本,http://wangpan.baidu.com/share/link?shareid=149068&uk=537055152。我是在登录动作中加了个一次控制器,让每个线程的登录动作只执行一次,搜索可以执行多次,如果你下载使用,将其中发送用户名、密码的post包中的username和password参数修改成自己的账号即可,然后在d盘下新建keyword.txt,里面放着用逗号隔开的关键词即可。 本文由易踪网原创,如果你喜欢本文,请关注易踪网

转:jmeter性能测试---登录百度进行搜索的更多相关文章

  1. JMeter性能测试,完整入门篇

    1. Jmeter简介 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件.相比Loadrunner而言,JMeter小巧轻便且免费,也越来越流行成为了主流的性能测试工具 ...

  2. JMeter性能测试,入门

    原文转自:https://blog.csdn.net/lovesoo/article/details/78579547 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件 ...

  3. JMeter性能测试,完整入门篇(转)

    原文转自:https://blog.csdn.net/lovesoo/article/details/78579547 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件 ...

  4. Selenium2学习-009-WebUI自动化实战实例-007-Selenium 8种元素定位实战实例源代码(百度首页搜索录入框及登录链接)

    此 文主要讲述用 Java 编写 Selenium 自动化测试脚本编写过程中,通过 ID.name.xpath.cssSelector.linkText.className.partialLinkTe ...

  5. 一篇文章入门Jmeter性能测试【经典长文】

    孟船长  目录 1.性能测试定义2.为什么要做性能测试3.性能测试指标.性能测试分类4.Jmeter性能测试实战[入门级]5.参考文章链接 1.性能测试定义 百度&知乎 性能测试是通过自动化的 ...

  6. JMeter性能测试-服务器资源监控插件详解

          零.引言 我们对被测应用进行性能测试时,除了关注吞吐量.响应时间等应用自身的表现外,对应用运行所涉及的服务器资源的使用情况,也是非常重要的方面,通过实时监控,可以准确的把握不同测试场景下服 ...

  7. Jmeter性能测试实践之java请求

     前言 Apache Jmeter是开源.易用的性能测试工具,之前工作中用过几次对http请求进行性能测试,对jmeter的基本操作有一些了解.最近接到开发的对java请求进行性能测试的需求,所以需要 ...

  8. js 百度云搜索框

    // ==UserScript==// @name 百度云插件+APIKey// @namespace // @version 5.0.2.1// @description 在百度云网盘的页面添加一个 ...

  9. 11月1号开学! 《jmeter性能测试实战》崭新亮相!

    课程介绍 第10期<jmeter性能测试实战>课程,11月2号开学!全新改版,和之前的课程框架完全不同 主讲老师:飞天小子 上课方式:每周六周日晚8点到10点,QQ群视频在线直播教学 本期 ...

随机推荐

  1. Openjudge-计算概论(A)-分数求和

    描述: 输入n个分数并对他们求和,并用最简形式表示.所谓最简形式是指:分子分母的最大公约数为1:若最终结果的分母为1,则直接用整数表示. 如:5/6.10/3均是最简形式,而3/6需要化简为1/2, ...

  2. 使用Erlang和Yaws开发REST式的服务

    看过那张很出名的“Apache vs. Yaws”图么?是不是在考虑你也应该使用Yaws了?这些图给人的第一印象是,Yaws在可伸缩性上具有难以置信的巨大优势,它可以扩展到80000个并行的连接,而 ...

  3. 杭电三部曲一、基本算法;19题 Cow Bowling

    Problem Description The cows don't use actual bowling balls when they go bowling. They each take a n ...

  4. git: reset

    git reset --hard:把commit撤销,意思是不仅此次commit提交的文件从本地版本库的状态重置,而且把此次commit的文件也从本地目录中删除 所以如果你执行之后发现,git sta ...

  5. juniper防护墙接口的NAT和ROUTE模式如何选择问题

    juniper防护墙一般是把trust接口部署为NAT模式,untrust接口部署为route模式.这样当来自内部的数据访问Utrust区域时,会把源地址翻译成untrust接口的地址.从而达到隐藏内 ...

  6. 不自动切换eclipse视图

    刚开始使用eclipse进行调试时,当弹出"Confir Perspective Switch"视图时,不小心点了“No”.以后每次debug的时候都不切换到debug视图. 后发 ...

  7. PAT (Top Level) Practise 1005 Programming Pattern (35)

    后缀数组.排序之后得到height数组,然后从上到下将height>=len的都分为一组,然后找到第一组个数最多的输出即可. #pragma comment(linker, "/STA ...

  8. hdu_4828_Grids(卡特兰数+逆元)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4828 题意:中文,不解释 题解:实际就是一个卡特兰递推: Catalan(n+1)= Catalan( ...

  9. 认识ASP.NET MVC的5种AuthorizationFilter

    在总体介绍了筛选器及其提供机制(<深入探讨ASP.NET MVC的筛选器>)之后,我们按照执行的先后顺序对四种不同的筛选器进行单独介绍,首先来介绍最先执行的AuthorizationFil ...

  10. ASP.NET MVC 使用TempData

    ASP.NET MVC的TempData用于传输一些临时的数据,例如在各个控制器Action间传递临时的数据或者给View传递一些临时的数据,相信大家都看过"在ASP.NET页面间传值的方法 ...