全部产品
性能测试 PTS

脚本编写

更新时间:2017-09-13 16:30:59   分享:   

对于非 HTTP/HTTPS 协议的业务(如 TCP 协议等)或者某些内容不能录制的场景(如加密算法,非浏览器访问的应用等),需要进行手工编写代码开发脚本。

手工脚本语言为 Jython,目前支持 Jython 2.5.3 版本。

Jython 语法

Jython 程序由一系列语句组成,语句组成了代码块,代码块组成了方法、函数,然后再通过类把数据、方法和函数封装起来。和其它高级语言一样,Jython 的语句也是由一些最基本的词(token)组成。Token 可以是标识符(identifiers)、关键字(keywords)、字面值(literals)、操作符(operators)和分割符(delimiters),这些 token 通过 Jython 的语言执行器进行词法分析产生,而词法分析器通过字符方式读入 Jython 脚本文件。

脚本框架

性能测试的性能测试脚本是一个 TestRunner 类,这个类会被每一个并发线程初始化。

  1. 测试进程首先加载脚本并执行脚本中顶格的语句,同时定义 TestRunner 这个测试类。
  2. 然后每个线程会实例化一个 TestRunner 类,调用类中的 init 方法一次,
  3. 继而循环调用 TestRunner 类的 call 方法。
  4. 最后线程结束时会调用类中的 del 方法。

init 和 del 方法都是可选的,只有 call 方法是必需的。

示例解析

  1. #第一部分:执行器声明和脚本编码声明
  2. #! /usr/bin/env python
  3. # -*- coding: utf-8 -*-
  4. #第二部分:Jython类库、Java类库和自定义类的导入
  5. # PTS Script Version 1.0
  6. # PTS脚本SDK:框架API、常用HTTP请求/响应处理API
  7. from util import PTS
  8. from HTTPClient import NVPair
  9. from HTTPClient import Cookie
  10. from HTTPClient import HTTPRequest
  11. from HTTPClient import CookieModule
  12. #第三部分:测试进程级别的脚本语句和初始化
  13. # 脚本初始化段,可以设置压测引擎的常用HTTP属性
  14. #PTS.HttpUtilities.setKeepAlive(False)
  15. #PTS.HttpUtilities.setUrlEncoding('GBK')
  16. #PTS.HttpUtilities.setFollowRedirects(False)
  17. #PTS.HttpUtilities.setUseCookieModule(False)
  18. PTS.HttpUtilities.setUseContentEncoding(True)
  19. PTS.HttpUtilities.setUseTransferEncoding(True)
  20. #第四部分:TestRunner测试类
  21. # 脚本执行单元类,每个VU/压测线程会创建一个TestRunner实例对象
  22. class TestRunner:
  23. # TestRunner对象的初始化方法,每个线程在创建TestRunner后执行一次该方法
  24. def __init__(self):
  25. self.threadContext = PTS.Context.getThreadContext()
  26. self.init1()
  27. self.init_cookies = CookieModule.listAllCookies(self.threadContext)
  28. # 主体压测方法,每个线程在测试生命周期内会循环调用该方法
  29. def __call__(self):
  30. PTS.Data.delayReports = 1
  31. for c in self.init_cookies:
  32. CookieModule.addCookie(c, self.threadContext)
  33. statusCode = self.action1()
  34. PTS.Framework.setExtraData(statusCode)
  35. statusCode = self.action2()
  36. PTS.Framework.setExtraData(statusCode)
  37. PTS.Data.report()
  38. PTS.Data.delayReports = 0
  39. # TestRunner销毁方法,每个线程循环执行完成后执行一次该方法
  40. def __del__(self):
  41. for c in self.init_cookies:
  42. CookieModule.addCookie(c, self.threadContext)
  43. self.end1()
  44. # 定义请求函数
  45. def init1(self):
  46. ……
  47. def action2(self):
  48. ……
  49. def action2(self):
  50. ……
  51. #第五部分:instrumentMethod语句
  52. # 编织压测事务
  53. PTS.Framework.instrumentMethod(u'action1', 'action1', TestRunner)
  54. PTS.Framework.instrumentMethod(u'action2', 'action2', TestRunner)
本文导读目录
本文导读目录
以上内容是否对您有帮助?