YONGFEIUALL

izheyi.com


  • Home

  • Archives

  • Categories

  • Tags

  • About

  • Search

Jmeter: JSR223使用

Posted on 2021-04-14 | In Jmeter |

Jmeter经常用BeanShell来实现一些其本身不能处理的任务,但是BeanShell的效率不高,现在可以用JSR223来代替,支持groovy脚本,效率更高。

常用内置变量

  • Vars

    定义变量与调用变量

    1
    2
    3
    4
    5
    vars.get(String key):从jmeter中获得变量值

    vars.put(String key,String value):数据存到jmeter变量中

    vars.putObject("OBJ1",new Object());
  • Props

    设置属性与调用属性

    1
    2
    3
    4
    ${__setProperty(test1,property1,)};
    props.put(“test2”,“property2”);
    String test1 =props.get(“test1”);
    String test2 = props.get(“test2”);
  • Ctx

    通过它来访问当前线程的上下文

    1
    2
    3
    getVariables():获取当前线程的所有变量

    getPreviousResult() :获取前一个取样器的结果
  • prev

    获取前面的sample采样的结果

    1
    2
    3
    getResponseDataAsString():获取响应信息

    getResponseCode() :获取响应code
  • log

    打印日志 ,日志会保存在jmeter.log中

运行外部文件

  • Java

    在JSR223中引入源文件并执行,执行与JAVA本身的方法一致

    1
    source(“F:/Test/demo1.java”);
  • Jar

    有下边两种方法可以引入jar包,执行与JAVA本身的方法一致
    1、将jar包放到Jmeter安装目录的\lib\ext目录下
    2、在测试计划中导入

Jmeter: 常用设置in properties

Posted on 2021-04-02 | In Jmeter |

在Jmeter里常用的设置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
jmeter.hidpi.mode=true
jmeter.hidpi.scale.factor=2.0
sampleresult.default.encoding=UTF-8
jsyntaxtextarea.font.size=20

jmeter.reportgenerator.overall_granularity=1000

jmeter.save.saveservice.bytes = true
jmeter.save.saveservice.label = true
jmeter.save.saveservice.latency = true
jmeter.save.saveservice.response_code = true
jmeter.save.saveservice.response_message = true
jmeter.save.saveservice.successful = true
jmeter.save.saveservice.thread_counts = true
jmeter.save.saveservice.thread_name = true
jmeter.save.saveservice.time = true
# the timestamp format must include the time and should include the date.
# For example the default, which is milliseconds since the epoch:
jmeter.save.saveservice.timestamp_format = ms
# Or the following would also be suitable
jmeter.save.saveservice.timestamp_format = yyyy/MM/dd HH:mm:ss

jmeter.save.saveservice.assertion_results_failure_message = true

建议在user.properties里设置。

Jmeter: 命令行运行和基本参数使用

Posted on 2021-03-20 | In Jmeter |

GUI模式仅用于创建测试计划和调试脚本,真正跑性能测试时候,不要用 GUI 模式,用命令行模式

基本参数

-t,–testfile <参数>
要运行的jmeter test(.jmx)文件

-l,–logfile <参数>
将样本记录到的文件

-j,–jmeterlogfile <参数>
jmeter运行日志文件(jmeter.log)

-n,–nongui
在命令行模式下运行JMeter

-g,–reportonly <参数>
仅从测试结果文件生成报告仪表板

-e,–reportatendofloadtests
负载测试后生成报告仪表板

-o,–reportoutputfolder <参数>
报告仪表板的输出文件夹

==========================================

-s,–server
运行JMeter服务器

-H,–proxyHost <参数>
设置供JMeter使用的代理服务器

-P,–proxyPort <参数>
设置代理服务器端口以供JMeter使用

-r,-runremote
启动远程服务器(在remote_hosts中定义)

-R,–remotestart <参数>
启动这些远程服务器(覆盖remote_hosts)

-X,–remoteexit
测试结束时退出远程服务器(CLI模式)

==========================================

-J,–jmeterproperty <参数> = <值>
定义其他JMeter属性

-G,–globalproperty <参数> = <值>
定义全局属性或属性文件(发送到服务器)
例如-Gport = 123
或-Gglobal.properties

-D,–systemproperty <参数> = <值>
定义其他系统属性

-S,–systemPropertyFile <参数>
其他系统属性文件

-f,-forceDeleteResultFile
在开始测试之前,强制删除现有结果文件和Web报告文件夹(如果存在)

-L,–loglevel <参数> = <值>
[类别=]级别,例如jorphan = INFO,jmeter.util = DEBUG或com.example.foo = WARN

-d,–homedir <参数>
要使用的jmeter主目录

设置命令行参数

1
C:\Users\Desktop>jmeter -n -t Neo.jmx -f -l result/report.jtl -e -o report
Sep 25, 2021 11:01:36 AM java.util.prefs.WindowsPreferences <init>
WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.
Creating summariser <summary>
Created the tree successfully using Neok.jmx
Starting standalone test @ Sat Sep 25 11:01:37 CST 2021 (1632538897030)
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
summary =      3 in 00:00:00 =    7.0/s Avg:   101 Min:     1 Max:   277 Err:     0 (0.00%)
Tidying up ...    @ Sat Sep 25 11:01:37 CST 2021 (1632538897689)
... end of run

设置属性参数

为了更好的用命令行跟Jenkins集成, 可以设置以下Jmeter属性:线程数、duration、ramp up-time。

  1. 设置用户变量

  2. 更改线程组使用变量

  3. 命令行验证

    1
    C:\Users\Desktop>jmeter -n -Jthread_number=5 -Jramp_up=2 -Jduration=60 -t Neo.jmx -f -l result/report.jtl -e -o report
    Creating summariser <summary>
    Created the tree successfully using Neo.jmx
    Starting standalone test @ Sat Sep 25 11:30:03 CST 2021 (1632540603981)
    Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
    summary +      1 in 00:00:00 =    2.9/s Avg:   242 Min:   242 Max:   242 Err:     0 (0.00%) Active: 1 Started: 1 Finished: 0
    summary +   1706 in 00:00:25 =   67.1/s Avg:    71 Min:     0 Max:   386 Err:     0 (0.00%) Active: 5 Started: 5 Finished: 0
    summary =   1707 in 00:00:26 =   66.2/s Avg:    71 Min:     0 Max:   386 Err:     0 (0.00%)
    summary +   2013 in 00:00:32 =   63.7/s Avg:    74 Min:     0 Max:  2139 Err:     0 (0.00%) Active: 5 Started: 5 Finished: 0
    summary =   3720 in 00:00:57 =   64.8/s Avg:    72 Min:     0 Max:  2139 Err:     0 (0.00%)
    summary +     88 in 00:00:03 =   30.7/s Avg:   243 Min:     0 Max:  2136 Err:     0 (0.00%) Active: 0 Started: 5 Finished: 5
    summary =   3808 in 00:01:00 =   63.2/s Avg:    76 Min:     0 Max:  2139 Err:     0 (0.00%)
    Tidying up ...    @ Sat Sep 25 11:31:04 CST 2021 (1632540664505)
    ... end of run

    -J是设置本地jmeter属性;-G是设置server的jmeter属性(只有设置了远程机,开启了远程服务,才需要用到-G)

Jmeter: 常用函数

Posted on 2021-03-12 | In Jmeter |

Jmeter提供了很多,列举一些比较常用函数,详细的自行查看(工具 -> 函数帮助):

函数 说明
__Random 生成随机数
__RandomDate 生成随机日期
__RandomString 生成随机字符串
__setProperty 设置属性
__property 读取属性
__P 读取属性
__V 拼接字符串
__time 返回指定格式的当前时间
__MD5 将字符串MD5加密
__UUID 生成随机UUID字符串
__TestPlanName 测试计划名称
__StringFromFile 从文件中读取一行
__strLen 字符串长度
__split 将字符串拆分为变量
__substring 提取字符串的子串
__machineName 机器名
__machineIP 机器IP
__isDefined 判断变量是否已存在
__BeanShell 可执行beanshell脚本
__char 根据unicode生成字符
__chooseRandom 从指定的范围里面取值
__counter 计数器
__env 获取环境变量的值
__eval 读取变量表达式
__FileToString 读取文件
__intSum 两个或多个整数的总和
__longSum 两个或多个长值的总和
__digest 将字符串加密
__if if 判断
__iterationNum 线程循环次数

Jmeter: 获取 Jmeter 的属性

Posted on 2021-03-05 | In Jmeter |

在跨平台运行,或者配置路径的时候,需要用到Jmeter的属性。

可能用下边这个函数:

__P() 函数

比如Linux的file.separator 的是 /,Windows的\,${__P(file.separator,)}可以根据不同的系统,获取不同系统下的文件路径分隔符。

如何查看Jmeter属性

测试计划右键添加:非测试元件 -> 属性显示。如下图所示:

熊猫来了探险

Posted on 2021-02-15 | In 丁丁 |

Pytest - 获取用例执行结果(pytest_runtest_makereport)

Posted on 2020-11-08 | In Automation Testing |

可以通过pytest hook 来实现用例执行结果的统计。

  1. 初步实现

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    CASES = {'total': 0, 'passed': 0, 'failed': 0, 'error': 0}

    @pytest.hookimpl(hookwrapper=True, tryfirst=True)
    def pytest_runtest_makereport(item, call):
    result = yield
    report = result.get_result()
    print(report)
    print(report.nodeid)
    if report.when == 'setup' and report.outcome == 'failed':
    CASES['total'] += 1
    CASES['error'] += 1
    elif report.when == 'call':
    CASES['total'] += 1
    if report.outcome == 'passed':
    CASES['passed'] += 1
    elif report.outcome == 'failed':
    CASES['failed'] += 1
    print(CASES)

    这样有一个问题,当有失败重跑情况时,会把每次重跑都统计一次运行结果,结果会有偏差,不应该包含重跑的结果,因为是同一个Case。

  2. 换个方式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    CASES = {'total': 0, 'passed': 0, 'failed': 0}
    RUN_RESULT = {}

    @pytest.hookimpl(hookwrapper=True, tryfirst=True)
    def pytest_runtest_makereport(item, call):
    result = yield
    report = result.get_result()
    print(report)
    if (report.when == 'setup' or report.when == 'teardown') and report.outcome == 'failed':
    RUN_RESULT[report.nodeid] = 'failed'
    elif report.when == 'call':
    RUN_RESULT[report.nodeid] = report.outcome
    print(RUN_RESULT)


    CASES['total'] = len(RUN_RESULT)
    CASES['passed'] = len({k: v for k, v in RUN_RESULT.items() if v == 'passed'})
    CASES['failed'] = len({k: v for k, v in RUN_RESULT.items() if v == 'failed'})
    print(CASES)
  3. 结果

    1
    2
    {'test_demo.py::test_demo01[zhangsan]': 'failed', 'test_demo.py::test_demo01[lisi]': 'failed', 'test_demo.py::test_demo01[wangwu]': 'failed', 'test_demo.py::test_demo02': 'passed'}
    {'total': 4, 'passed': 1, 'failed': 3}

allure 定制详细报告

Posted on 2020-10-20 | In Automation Testing |

默认的allure报告不能详细的显示出来脚本执行的步骤,能做到跟Log里一样的每一步操作。

用@allure.step()装饰器来实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
@allure.step("Input text {text} in [{element}]")
def input_text(self, element, text):
"""**Description**:
Fill text to the page_element located by locator

:param element: The locator to locate the page_element.
:param text: value to set to the page_element
:return:
"""

ele = self.find_element(element)
ele.clear()
ele.send_keys(text)
logger.info(f'Input [{text}] in {element}')

运行结果如下:

钉钉自定义机器人

Posted on 2020-10-09 | In Automation Testing |

有想法是把自动化执行的结果实时发送到钉钉群里,及时提醒。

简单看了一下,可以通过Webhook自定义机器人来实现:

  1. 为钉钉群创建自定义机器人 ,会产生webhook。

  2. 通过DingtalkChatbot来实现

  3. 发送机器人信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    from dingtalkchatbot.chatbot import DingtalkChatbot

    webhook = 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxx'

    xiaoding = DingtalkChatbot(webhook)

    # xiaoding.send_text(msg='我就是小丁,测试我是小机器人!', is_at_all=True)

    # xiaoding.send_text(msg='我就是小丁,测试只@一人', at_mobiles=[150xxxxxxxx])

    # xiaoding.send_link(title='测试小丁',
    # text='我是小机器人', message_url='http://izheyi.com/',
    # pic_url='http://izheyi.com/uploads/avatar.jpg')

    xiaoding.send_markdown(title='我就是测试小丁!',
    text='哈哈,测试我是小机器人发送Markdown\n'
    '![izheyi](http://izheyi.com/uploads/avatar.jpg)\n'
    '>这里是引用显示',
    is_at_all=True)

    Result:

    我就是小丁,测试我是小机器人!@所有人

    ​ 收到 回复

    基本上实现了Python通过小机器人发送信息,下面就可以把测试的结果发到群里了。

    比如:

    1
    2
    3
    4
    5
    6
    7
    xiaoding.send_markdown(title='我就是测试小丁!',
    text='Automation Test Result: \n'
    '>Total: 25\n\n'
    '> <font size=4 color=#D2691E> Passed: 20 </font>\n\n'
    '> Failed: 4\n\n'
    '> Error: 1\n\n',
    is_at_all=True)

Automaton Test Result:

Total: 25

Passed: 20

Failed: 4

Error: 1

pytest + allure + jenkins集成

Posted on 2020-09-15 | In Product Delivery |

Pytest的报告有点简单,把报告换成了allure,可以一并集成到Jenkins上去。

  1. 安装插件Allure Jenkins Plugin

  2. Allure Commandline 配置

    “全局工具配置”页面

  3. 创建Job

    1. build

    2. post build

  4. 支行Job

1…456…40
唐胡璐

唐胡璐

i just wanna live while i am alive

393 posts
42 categories
74 tags
RSS
LinkedIn Weibo GitHub E-Mail
Creative Commons
© 2022 唐胡璐
Powered by Hexo
|
Theme — NexT.Pisces v5.1.4