自动化接口测试

本章我们主要讲述Jenkins+jmeter自动化接口测试。

目录


接口测试定义为一种软件测试类型,用于验证两个不同软件系统之间的通信是否正确完成。集成两个组件的连接称为接口。计算机世界中的此接口可以是API,Web服务等之类的东西。这些连接服务或接口的测试称为接口测试。接口实际上是由一组命令,消息和其他允许设备与用户之间进行通信的属性组成的软件。

运行测试用例

  1. jmeter -n -t scripts/blog.jmx -l report.jtl
  2. -e -o report -Jjmeter.save.saveservice.output_format=csv

参数说明:

  • -n: 非GUI模式执行JMeter
  • -t: 执行测试文件所在的位置
  • -l: 指定生成测试结果的保存文件,jtl文件格式
  • -e: 测试结束后,生成测试报告 -o: 指定测试报告的存放位置

看下运行的效果:测试报告已生成是HTML文件,可直接打开。

images

images

批量运行用例

我们可以使用ant与Jmeter集成build.xml部分内容。 仓库地址:https://github.com/zeyangli/jmetertest.git

  1. <?xml version="1.0" encoding="utf8"?>
  2. <!-- 拷贝报告所需的图片资源至目标目录 -->
  3. <project name="ant-jmeter-test" default="run" basedir=".">
  4. <tstamp>
  5. <format property="time" pattern="yyyyMMddHHmm" />
  6. </tstamp>
  7. <!-- 需要改成自己本地的jmeter目录-->
  8. <property name="jmeter.home" value="/usr/local/buildtools/apache-jmeter-5.2.1" />
  9. <!-- jmeter生成的jtl格式的结果报告的路径-->
  10. <property name="jmeter.result.jtl.dir" value="./result/jtlfile" />
  11. <!-- jmeter生成的html格式的结果报告的路径-->
  12. <property name="jmeter.result.html.dir" value="./result/htmlfile" />
  13. <!-- ʺ生成的报告的前缀-->
  14. <property name="ReportName" value="TestReport_" />
  15. <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />
  16. <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${time}_SummaryReport.html" />
  17. <property name="jmeter.detail.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />
  18. <property name="jmeter.detail.result.htmlName" value="${jmeter.result.html.dir}/${time}_DetailReport.html" />
  19. <target name="run">
  20. <antcall target="test" />
  21. <antcall target="report" />
  22. </target>
  23. <target name="test">
  24. <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
  25. <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
  26. <!-- 声明要运行的脚本“*.jmx”指包含此目录下的所有jmeter脚本-->
  27. <testplans dir="./scripts" includes="*.jmx" />
  28. <property name="jmeter.save.saveservice.output_format" value="xml"/>
  29. </jmeter>
  30. </target>

运行用例

  1. Password:
  2. Buildfile: /Users/zeyang/Desktop/jmetertest-master/build.xml
  3. run:
  4. test:
  5. [jmeter] Executing test plan: /Users/zeyang/Desktop/jmetertest-master/scripts/blog.jmx ==> /Users/zeyang/Desktop/jmetertest-master/result/jtlfile/TestReport_202001100820.jtl
  6. [jmeter] Creating summariser <summary>
  7. [jmeter] Created the tree successfully using /Users/zeyang/Desktop/jmetertest-master/scripts/blog.jmx
  8. [jmeter] Starting the test @ Fri Jan 10 08:20:26 CST 2020 (1578615626561)
  9. [jmeter] Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
  10. [jmeter] summary = 2 in 00:00:00 = 8.2/s Avg: 64 Min: 59 Max: 70 Err: 0 (0.00%)
  11. [jmeter] Tidying up ... @ Fri Jan 10 08:20:27 CST 2020 (1578615627287)
  12. [jmeter] ... end of run
  13. report:
  14. [xslt] Processing /Users/zeyang/Desktop/jmetertest-master/result/jtlfile/TestReport_202001100820.jtl to /Users/zeyang/Desktop/jmetertest-master/result/htmlfile/202001100820_DetailReport.html
  15. [xslt] Loading stylesheet /usr/local/apache-jmeter-5.1.1/extras/jmeter.results.shanhe.me.xsl
  16. [xslt] Processing /Users/zeyang/Desktop/jmetertest-master/result/jtlfile/TestReport_202001100820.jtl to /Users/zeyang/Desktop/jmetertest-master/result/htmlfile/202001100820_SummaryReport.html
  17. [xslt] Loading stylesheet /usr/local/apache-jmeter-5.1.1/extras/jmeter-results-detail-report_21.xsl
  18. BUILD SUCCESSFUL
  19. Total time: 3 seconds

测试报告

images

images

自动化测试

使用Jenkins集成ant 和jmeter进行接口测试,直接看Jenkinsfile吧。我们可以理解为执行了ant的构建命令去运行接口测试,然后通过publishHtml展示测试报告。

images

  1. #!groovy
  2. @Library('jenkinslibrary@master') _
  3. //func from shareibrary
  4. def build = new org.devops.build()
  5. def tools = new org.devops.tools()
  6. def toemail = new org.devops.toemail()
  7. //env
  8. String buildType = "${env.buildType}"
  9. String buildShell = "${env.buildShell}"
  10. String srcUrl = "${env.srcUrl}"
  11. String branchName = "${env.branchName}"
  12. userEmail = "2560350642@qq.com"
  13. //pipeline
  14. pipeline{
  15. agent { node { label "build"}}
  16. stages{
  17. stage("CheckOut"){
  18. steps{
  19. script{
  20. println("${branchName}")
  21. tools.PrintMes("获取代码","green")
  22. checkout([$class: 'GitSCM', branches: [[name: "${branchName}"]],
  23. doGenerateSubmoduleConfigurations: false,
  24. extensions: [],
  25. submoduleCfg: [],
  26. userRemoteConfigs: [[credentialsId: 'gitlab-admin-user', url: "${srcUrl}"]]])
  27. }
  28. }
  29. }
  30. stage("Build"){
  31. steps{
  32. script{
  33. tools.PrintMes("执行打包","green")
  34. build.Build(buildType,buildShell)
  35. //展示测试报告
  36. publishHTML([allowMissing: false,
  37. alwaysLinkToLastBuild: false,
  38. keepAll: false,
  39. reportDir: 'result/htmlfile',
  40. reportFiles: 'SummaryReport.html,DetailReport.html',
  41. reportName: 'InterfaceTestReport',
  42. reportTitles: ''])
  43. }
  44. }
  45. }
  46. }
  47. post {
  48. always{
  49. script{
  50. println("always")
  51. }
  52. }
  53. success{
  54. script{
  55. println("success")
  56. toemail.Email("流水线成功",userEmail)
  57. }
  58. }
  59. failure{
  60. script{
  61. println("failure")
  62. toemail.Email("流水线失败了!",userEmail)
  63. }
  64. }
  65. aborted{
  66. script{
  67. println("aborted")
  68. toemail.Email("流水线被取消了!",userEmail)
  69. }
  70. }
  71. }
  72. }