python http基准测试工具

httpbenchmark的Python项目详细描述


httpbenchmark的目标是介于apache bench(ab)和一个更全面的 http测试套件。它以最简单的形式提供了与 ab,它支持-n开关来指定要发出的请求数 和a-c开关来指定有多少并发用户。

然而,真正的目的是子类化httpbenchmark并重写 worker方法来实现您自己的测试逻辑。在这方面你可以 将httpbenchmark看作一个框架,它允许您为 您的http应用程序也旨在强调服务器。查看工作程序代码 下面一节。

安装

使用pipeasy_install可以轻松完成安装。

pipinstallhttpbenchmark

基本用法

提供了一个名为pb的脚本,该脚本旨在作为 apacheab脚本。

pb -n 1000 -c 25 http://my-host.tld/endpoint/

工人代码

默认情况下,httpbenchmark只发送一个GET请求和 需要200 OK返回码。为了充分利用您应该创建的系统 你自己的脚本子类HTTPBenchmark

下面是一个不完整且未经测试的示例,它正在对某个应用程序进行负载测试 与用户和朋友打交道。它旨在说明 使用httpbenchmark

fromhttpbenchmarkimportHTTPBenchmarkfromtornadoimportgenimportrandomUSER_IDS=[1111,2222,3333,4444]_url=lambdax:''.join(['http://my-host.tld/',x])classMyBenchmark(HTTPBenchmark):@gen.coroutinedefworker(self):'''
        get_worker should return a callable that will be called by the async http client
        '''ifrandom.choice([True,False]):yieldself.new_user()else:yieldself.returning_user()@gen.coroutinedefnew_user(self):user_id=random.choice(USER_IDS)self.log.debug("New user: %s"%user_id)friends=yieldself.open_json(_url("register?uid=%d"%user_id))# ... handle registration response ...iffailure:self.log.error("Indicate reason for failure")self.log.debug("Show debugging info if you want")self.finish_request(False)else:yieldself.next_step(user_id,friends['friendList'][0])@gen.coroutinedefreturning_user(self):user_id=random.choice(USER_IDS)self.log.debug("Returning user: %s"%user_id)defhandle_login(response,friends):friends=yieldself.open_json(_url("login?uid=%d"%user_id))# ... handle login response ...iffailure:self.log.error("Indicate reason for failure")self.log.debug("Show debugging info if you want")self.finish_request(False)else:yieldself.next_step(user_id,friends['friendList'][0])@gen.coroutinedefnext_step(self,user_id,friend_id):# ... do something else ...iffailure:self.log.error("Indicate reason for failure")self.log.debug("Show debugging info if you want")self.finish_request(False)else:# success!self.finish_request()if__name__=='__main__':MyBenchmark().main()

基本要素

  • 这使用Tornado’s async generator interface来实现并发,您的 函数需要包装在@gen.coroutine中,而您应该yield 他们之间。
  • worker是主代码所在的位置。无论何时何地都会叫它 是基于并发性的空闲插槽。
  • yield self.get(url, code=200)用于发出get请求。你会 在操作完成时返回响应对象。
  • self.post(url, params={}, callback)用于发布数据。params 应该是字典,并将作为post数据发送。它的功能 否则与get相同。
  • 如果要发布到php后端并需要使用php的nested数组 将php_urlencode传递给self.post方法的参数的语法 值为True,它将相应地对参数进行编码。
  • self.get_json(url, callback)是获取和解析json的快捷方式 返回的数据。回调应该接受两个参数,第一个 是响应对象,第二个是解码的json。
  • self.finish_request(True/False)应该被调用来表示 请求。如果一切都按你所期望的那样工作,则传递它True,否则 传递False
  • self.debug_response(response)是一个方便的函数 开发测试用例。如果您传递一个响应对象,它将打印 输出对象以及头和正文的摘要,以便可以调试 实时数据。

待办事项

  • 添加一些工作示例

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Maven中的java,为什么要运行“mvn clean”?   java会降低图像质量。OutOfMemory异常Android   在Java8中将函数传递到流的过滤方法   jboss6。x java。lang.NoClassDefFoundError,当我将<listenerclass>包含到web时。xml java   java读取图像像素时,像素Alpha始终为255   java在迭代后跳过一行   java如何创建我自己的单链表   意图上的java空指针异常。getStringExtra.:安卓   具有连接实体的java Hibernate onetoone映射   java需要帮助在自制的仓鼠模拟器上实现启动/恢复/暂停/停止线程操作   如何测试非主方法?[Java,IntelliJ]   java jdbc自动提交(false)不起作用   java在JADE中的同一容器中创建多个代理   java OkHttp获取失败的响应正文   java Webdriver flash按钮