全部产品
性能测试 PTS

参数化

更新时间:2017-07-18 15:00:24   分享:   

参数文件用于构造数据集合,使测试数据更丰富。在请求设置中将数据值替换为指定的变量值后,施压过程中会将参数文件中的值动态替换为指定变量值。参数化可以用于很多场景,例如在需要用户名密码的业务中,需要使用各种不同的用户名以及对应的密码进行压测的场景。

构造参数文件

  • 目前仅支持 CSV 格式,请使用 UltraEdit 或 Notepad 工具(不要用 Excel)进行编辑;
  • 第一行为参数变量,可增加多个参数变量,首行不得超过 255 个字符;
  • 第二行开始为参数值,可增加多个参数值,脚本运行时会读取对应参数变量的参数值按从上往下的顺序执行;
  • 每列参数化列值以英文逗号分隔;
  • 如果参数文件内容包含中文,参数文件请使用 UTF-8 无 BOM 格式编码;
  • 每个参数文件大小不得超过 60M;
  • 一个脚本最多 10 个参数文件,不得重名,重名会覆盖。

参数化

上传参数文件

在新增脚本页面上传文件。上传后的文件默认开启循环使用状态,即参数文件中的数据会循环扫描使用。

上传文件

说明:

  1. 启用参数文件循环,则执行任务会循环使用该参数文件的参数值。

  2. 不启用参数文件循环适用于两种情况:

    • 在只有一台施压机的情况下,执行任务只会运行一次该参数文件的参数值,然后任务停止。
    • 在有多台施压机情况下,每个施压机都是全量数据。每个施压机会分别运行一次该参数文件参数值,然后任务停止。

请求链接参数化设置

一个参数文件或参数变量可用于多个不同链接,一个链接也可对应多个不同的参数文件或参数变量。

请求链接参数化设置分为模板编写和手工编写,分别对应不同的方式。

模板编写方式

  1. 在请求链接中选中要进行参数化的参数值,然后点击参数化按钮进行参数化。

    参数化选择阴影

  2. 在参数化窗口选择参数文件及参数变量,参数变量可通过系统自动读取参数文件获得。

    参数化选择变量

  3. 系统自动完成替换,替换格式为“%%_参数文件名:参数变量%%”。

    参数化结果展示

手工编写方式

具体步骤如下:

  1. 导入以下类库:

    1. from com.aliyun.pts import DsvReader
    2. from com.aliyun.pts import ParamManager
  2. 加载参数化文件:

    1. params = ParamManager.getInstance()
    2. params.addProvider(DsvReader(u'user.csv'))
  3. 参数化文件指针向下移一行,注意只需要调用一次:

    1. params.nextRecord(u'user.csv')
  4. 获取参数化值:

    1. name = params.getParamValue(u'user.csv:password')
手工参数化编写技巧

在需要参数化的字符串中用 “%%_参数文件名:参数变量%%” 进行替换,保存脚本后,会自动转换成可运行的脚本。

例如将参数化用户名的地方进行日志输出:

  1. PTS.Logger.info(‘username=%%_user.csv:password%%’)

保存脚本后,会将按照手工编写脚本参数化的步骤自动进行转换。

完整代码示例

  1. #! /usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # PTS Script Version 1.0
  4. # Trunner auto-generated test script at Tue Jul 12 09:53:55 CST 2016
  5. from java.lang import String
  6. from java.util import Random
  7. from java.util import Date
  8. # PTS脚本SDK:框架API、常用HTTP请求/响应处理API
  9. from util import PTS
  10. from HTTPClient import NVPair
  11. from HTTPClient import Cookie
  12. from HTTPClient import HTTPRequest
  13. from HTTPClient import CookieModule
  14. from HTTPClient import ShutdownException
  15. # PTS对参数化的相关支持
  16. from com.aliyun.pts import DsvReader
  17. from com.aliyun.pts import ParamManager
  18. # 脚本初始化段,可以设置压测引擎的常用HTTP属性
  19. PTS.HttpUtilities.setUrlEncoding('utf-8')
  20. PTS.HttpUtilities.setFollowRedirects(True)
  21. PTS.HttpUtilities.setTimeout(120000)
  22. # PTS.HttpUtilities.setKeepAlive(False)
  23. # PTS.HttpUtilities.setUseCookieModule(False)
  24. # PTS.HttpUtilities.setProxyServer('localhost', 8888)
  25. # PTS.Context.setParamDirectory("/Users/fei/Work/trunner/data")
  26. # 支持socket测试, 如TCP\UDP等协议
  27. # import socket
  28. # 设置系统编码
  29. import sys
  30. reload(sys)
  31. sys.setdefaultencoding('utf-8')
  32. params = ParamManager.getInstance()
  33. expiryDate = Date()
  34. expiryDate.year += 10
  35. params.addProvider(DsvReader(u'FileName.csv'))
  36. class TestRunner:
  37. # TestRunner对象的初始化方法,每个线程在创建TestRunner后执行一次该方法
  38. def __init__(self):
  39. self.threadContext = PTS.Context.getThreadContext()
  40. # 主体压测方法,每个线程在测试生命周期内会循环调用该方法
  41. def __call__(self):
  42. PTS.Data.delayReports = 1
  43. params.nextRecord(u'FileName.csv')
  44. PTS.Logger.info("username="+params.getParamValue(u'FileName.csv:Field')+"")
  45. # 请在此处调用事务方法
  46. #statusCode = self.action_name()
  47. #PTS.Framework.setExtraData(statusCode)
  48. PTS.Data.report()
  49. PTS.Data.delayReports = 0
  50. # 执行事务的方法,会在__call__主体压测方法中被调用到
  51. #def action_name(self):
  52. # 请输入方法内容
  53. # 调用施压引擎施压。第一个参数是事务名,可以为中文;第二个参数是执行事务方法的方法名;第三个统一写TestRunner
  54. #PTS.Framework.instrumentMethod(u'tran_name', 'action_name', TestRunner)
本文导读目录
本文导读目录
以上内容是否对您有帮助?