手工脚本__脚本编写_使用手册_性能测试-阿里云
手工脚本
对于非HTTP/HTTPS协议的业务(如: TCP协议等)或者某些内容不能录制(如:加密算法,非浏览器访问的应用等),需要进行手工编写代码开发脚本。
手工脚本语言为Jython,目前支持的Jython版本为2.5.3。 Jython是Python的Java语言实现,它使用Python的语法和类库,运行在JVM中,和同一个JVM中的Java类可以实现无缝互操作,因此使用Jython作为脚本语言可以最大程度的利用Python的简洁、高效,同时保留对Java语言的全面兼容。
- Jython语法
Jython程序由一系列语句组成,语句组成了代码块,代码块组成了方法、函数,然后再通过类把数据、方法和函数封装起来。和其它高级语言一样,Jython的语句也是由一些最基本的词(token)组成。Token可以是标识符(identifiers)、关键字(keywords)、字面值(literals)、操作符(operators)和分割符(delimiters),这些token通过Jython的语言执行器进行词法分析产生,而词法分析器通过字符方式读入Jython脚本文件。 - 脚本框架
性能测试的性能测试脚本是一个TestRunner类,这个类会被每一个并发线程初始化。测试进程首先加载脚本并执行脚本中顶格的语句,同时定义TestRunner这个测试类。然后每个线程会实例化一个TestRunner类,调用类中的init方法一次,继而循环调用TestRunner类的call方法。最后线程结束时会调用类中的del方法。init和del方法都是可选的,只有call方法是必需的。
#第一部分:执行器声明和脚本编码声明
#! /usr/bin/env python
# -*- coding: utf-8 -*-
#第二部分:Jython类库、Java类库和自定义类的导入
# PTS Script Version 1.0
# PTS脚本SDK:框架API、常用HTTP请求/响应处理API
from util import PTS
from HTTPClient import NVPair
from HTTPClient import Cookie
from HTTPClient import HTTPRequest
from HTTPClient import CookieModule
#第三部分:测试进程级别的脚本语句和初始化
# 脚本初始化段,可以设置压测引擎的常用HTTP属性
#PTS.HttpUtilities.setKeepAlive(False)
#PTS.HttpUtilities.setUrlEncoding('GBK')
#PTS.HttpUtilities.setFollowRedirects(False)
#PTS.HttpUtilities.setUseCookieModule(False)
PTS.HttpUtilities.setUseContentEncoding(True)
PTS.HttpUtilities.setUseTransferEncoding(True)
#第四部分:TestRunner测试类
# 脚本执行单元类,每个VU/压测线程会创建一个TestRunner实例对象
class TestRunner:
# TestRunner对象的初始化方法,每个线程在创建TestRunner后执行一次该方法
def __init__(self):
self.threadContext = PTS.Context.getThreadContext()
self.init1()
self.init_cookies = CookieModule.listAllCookies(self.threadContext)
# 主体压测方法,每个线程在测试生命周期内会循环调用该方法
def __call__(self):
PTS.Data.delayReports = 1
for c in self.init_cookies:
CookieModule.addCookie(c, self.threadContext)
statusCode = self.action1()
PTS.Framework.setExtraData(statusCode)
statusCode = self.action2()
PTS.Framework.setExtraData(statusCode)
PTS.Data.report()
PTS.Data.delayReports = 0
# TestRunner销毁方法,每个线程循环执行完成后执行一次该方法
def __del__(self):
for c in self.init_cookies:
CookieModule.addCookie(c, self.threadContext)
self.end1()
# 定义请求函数
def init1(self):
……
def action2(self):
……
def action2(self):
……
#第五部分:instrumentMethod语句
# 编织压测事务
PTS.Framework.instrumentMethod(u'action1', 'action1', TestRunner)
PTS.Framework.instrumentMethod(u'action2', 'action2', TestRunner)
最后更新:2016-05-06 10:44:36
上一篇:
录制工具__脚本编写_使用手册_性能测试-阿里云
下一篇:
脚本调试__脚本编写_使用手册_性能测试-阿里云
添加端口转发规则__NAT网关相关接口_API 参考_云服务器 ECS-阿里云
公交站点_阿里云帮助中心-阿里云,领先的云计算服务提供商
马云八年前遭受非议却坚持布局终成正果,阿里云成功让质疑者哑口无言
GetBucketLogging__关于Bucket的操作_API 参考_对象存储 OSS-阿里云
查询回源流量__资源监控接口_API 手册_CDN-阿里云
访问链路问题排查__常见问题_产品使用问题_容器服务-阿里云
云服务器 ECS 快照(Snapshot)快照 2.0 产品规格升级
企业邮箱在iPhone5上使用的设置说明__客户端使用_邮箱常见问题_企业邮箱-阿里云
消费幂等__最佳实践_消息队列 MQ-阿里云
OSSReader__Reader插件_使用手册_数据集成-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云