引言
自动化测试是指使用软件工具、脚本或编程来执行测试任务,以代替人工执行测试用例的过程。它使用自动化工具和技术来模拟用户操作,验证和评估软件应用程序的功能、性能和稳定性。
自动化测试的主要目的是提高测试效率和质量,它具有以下几个重要的意义:
1、提高效率:自动化测试可以大幅度缩短测试周期,减少测试工作量和时间成本。相比手动测试,自动化测试可以在短时间内执行大量测试用例,加快测试过程。
2、提高准确性:自动化测试可以消除人为的错误和主观判断,提供一致性的测试结果。它可以准确地模拟用户行为和操作,减少人为误差,提高测试准确性。
3、提高覆盖范围:自动化测试可以覆盖更多的测试场景和测试用例。它可以同时运行多个测试,并在不同的环境和配置下运行,更全面地测试应用的功能和性能。
4、提高回归测试效率:对于频繁更改和发布的系统,自动化测试可以在每次更改后快速运行回归测试,以确保新功能不会影响现有功能的正确性。
5、提高可重复性:自动化测试可以重复执行相同的测试用例,确保测试过程的一致性和可重现性。这对于验证和复现缺陷、追踪问题非常有价值。
6、释放人力:自动化测试可以将重复性和繁琐的测试任务交给机器完成,从而释放测试人员的时间和精力,使其能够更专注于更具创造性和挑战的测试任务,如测试策略的制定和缺陷分析。
总之,自动化测试在提高测试效率和质量方面具有重要的意义,使团队能够更快速、准确和全面地验证和评估软件应用的各个方面。
自动化测试的好处
自动化测试的好处包括提高测试效率、提高测试覆盖范围、提高测试准确性、提高回归测试效率、提高可重复性、节省时间和成本,以及释放测试人力。这些好处使团队能够更快速、准确、全面和可靠地进行软件测试,提供高质量的软件产品。
自动化测试工具的选择
调研两款工具,本次实践用选择httprunner
httprunner | pytest |
---|---|
httprunner是一个基于Python的开源工具,易于学习和上手,使用YAML语言编写测试脚本,对于非开发人员也比较友好 | ytest是一个成熟的Python测试框架,提供了丰富的功能和插件,但对于非开发人员来说,可能有一定的学习曲线。 |
httprunner不仅支持接口测试,还支持功能测试、性能测试、安全测试等多种类型的测试。它还具有数据驱动、参数化、断言等强大的功能,可以满足复杂的测试需求。 | pytest提供了丰富的功能和插件,支持各种类型的测试,如单元测试、集成测试、功能测试等。通过自定义插件和自定义装置,可以很灵活地扩展和定制。 |
httprunner有一个活跃的社区,文档详细,有较多的示例供参考。同时,它与Python的生态系统相集成,可以利用Python社区提供的丰富资源。 | pytest在Python社区中非常受欢迎,拥有活跃的社区和广泛的文档支持。还有许多插件可以集成到pytest中,增强其功能。 |
httprunner允许使用Python进行自定义扩展,可以通过编写Python代码来进行更高级的定制和扩展。 | pytest提供了丰富的插件机制,可以通过开发自定义插件来扩展其功能。这使得pytest非常灵活,可以应对各种定制和扩展需求。 |
自动化测试脚本的编写和维护
环境准备:python环境安装
安装httprunner
pip3 install httprunner
创建hrp项目
hrp startproject demo --py
手工编写用例,官网demo:
运行用例,生产测试报告
hrp run testcases -gc
用例增强-自定义函数
在项目下debugtalk.py文件下编写自定义函数
variables关键字下声明自定义函数格式 变量名:
函数实例
!
[
在这里插入图片描述
]
(
h
t
t
p
s
:
/
/
i
m
g
−
b
l
o
g
.
c
s
d
n
i
m
g
.
c
n
/
725
b
4
c
f
0
a
0254
e
11
b
1
f
b
3
d
667
e
752
c
50.
p
n
g
)
在用例中使用:
{函数实例} ![在这里插入图片描述](https://img-blog.csdnimg.cn/725b4cf0a0254e11b1fb3d667e752c50.png) 在用例中使用:
函数实例![在这里插入图片描述](https://img−blog.csdnimg.cn/725b4cf0a0254e11b1fb3d667e752c50.png)在用例中使用:变量名
用例增强-引用yml依赖
在测试步骤中引用yml文件作为依赖
用例增强-一个用例中变量导出给其他用例使用
在用例中使用关键字export导出需要给其他用例使用的变量
在新用例中引用变量
自动化测试集成与持续集成
本地集成思路
目的:将每次执行的自动化结果更新到测试平台展示
1、触达用例执行
2、执行结果生产静态文件保存到测试平台static目录下
测试平台搭建源码
import subprocess
import os
import shutil
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
dir = BASE_DIR
class do_case():
def __init__(self,dirpath):
self.dir = dirpath
def remove_file(self):
path = self.dir
files = os.listdir(path)
for file in files:
os.remove(path + file)
def rename_file(self):
file = os.listdir(self.dir)
for i in range(len(file)):
# 原文件名
n1 = self.dir + file[i]
# 新文件名
n2 = 'auto_report.html'
# 调用改名函数,完成改名操作
os.rename(n1, self.dir+n2)
def cope_file(self):
shutil.copy(self.dir + '\\auto_report.html', BASE_DIR + '\\cloudWeb\\public\\static')
def run_case(self):
subprocess.call(" hrp run testcases\-gc",
shell=True)
def run_case():
do = do_case(dir)
# 清除目录
do.remove_file()
# 执行用例
do.run_case()
# 改名report
do.rename_file()
# 移动report
do.cope_file()
前端代码
<template>
<div class="iframe_box">
<el-button type="primary" :loading="loadflag" style=" frameborder:0; margin-top:25%;margin-left:1.5%;" @click="run">run testcase</el-button>
<iframe
ref="iframeDom"
:src="`/static/auto_report.html`"
style="width: 100%; height: 100%; frameborder:1; position: absolute; top: 0; left: 0;margin-left:10%;"
/>
</div>
</template>
<script>
import { run_case_list } from '@/api/apiAuto'
export default {
data() {
return {
loadflag: false
}
},
methods: {
run() {
this.loadflag = true
run_case_list({}).then(res => {
this.loadflag = false
this.$message({ message: '用例运行完成', type: 'success' })
})
}
}
}
</script>
<style scoped>
.iframe_box{
background: #f5f3f3;
width: 100%;
height: 1000px;
}
</style>
效果展示