vlambda博客
学习文章列表

批量生成python自动化测试脚本

先前有家供应商与我们合作开发自动化工程,采用的py unittest作为脚本运行框架。我发现他们出的脚本都是挨个手写的,格式上也是参差不齐。所以有了根据用例表批量生成脚本的一段小代码

对一个测试脚本必须存在哪些内容,我认为若满足以下三点要求,就算一个合格的测试脚本了。

1、测试用例的描述,包含测试目的,测试详细步骤,预期结果等

2、简洁,易于阅读和维护的代码结构

3、详细的运行LOG记录与测试报告

所以很明显以上脚本结构上是不够完整的,测试执行人员可能都不知道这个脚本测的什么内容。改之

根据用例表批量生成脚本

我的用例管理表如下,xlsx的表格。以下内容是随便举的一个例子(可能测试用例写得不正确)

批量生成python自动化测试脚本

代码实现的逻辑:解析用例管理表,生成测试脚本框架

# !/usr/bin/env python
#
-*- coding:utf-8 -*-
#
!python3
__author__ = "xxx"
"""自动化脚本生成工具"""
import os
import xlrd
import time

TestCaseName
= ""
TestCaseDescription
= ""
TestCasePreCondition
= ""
TestCaseStep
= ""
TestCaseExpectResult
= ""
TestEnvironment
= ""
TestScriptName
= ""
cur_path
= os.getcwd()


def scripts_template():
testcases
= os.path.join(cur_path, u"用例模板.xlsx")
data
= xlrd.open_workbook(r'%s' % testcases)
table
= data.sheet_by_index(0)
n_rows
= table.nrows
n_cols
= table.ncols
for i in range(1, n_rows):
TestCaseName
= table.cell_value(i, 1)
TestCaseDescription
= table.cell_value(i, 2)
TestCasePreCondition
= table.cell_value(i, 3)
TestCaseStep
= table.cell_value(i, 4)
TestCaseExpectResult
= table.cell_value(i, 5)
TestEnvironment
= table.cell_value(i, 0)
TestScriptName
= "test_{0}".format(TestCaseName) #符合unittest测试用例定义的识别条件, 以"test"开头
filename = os.path.join(cur_path, "{0}.py".format(TestScriptName))
with open(filename,
'w', encoding='utf-8') as out:
out.write(
'''# !/usr/bin/env python
# -*- coding:utf-8 -*-

"""
#-----------------------------------------------------------------------
用例名称: {0}
用例描述: {1}
前置条件:
{2}
测试步骤:
{3}
预期结果:
{4}
测试环境: {5}
作者:{6}
日期:{7}
#-----------------------------------------------------------------------
"""

import unittest


class {8}(unittest.TestCase):

def setUp(self):
#TODO 添加用例执行前置条件
pass

def testRun(self):
#TODO 添加用例执行测试步骤
pass

def tearDown(self):
#TODO 添加恢复测试环境操作
pass

if __name__ == '__main__':
unittest.main()
'''.format(TestCaseName, TestCaseDescription, TestCasePreCondition,
TestCaseStep, TestCaseExpectResult, TestEnvironment,
__author__,
time.strftime(
'%Y-%m-%d'), TestScriptName));
print("generate scripts finished!")


if __name__ == "__main__":

scripts_template()

运行一下以上测试脚本生成代码。生成的脚本如下:

 1 # !/usr/bin/env python
2 # -*- coding:utf-8 -*-
3
4 """
5 #-----------------------------------------------------------------------
6 用例名称: case_01_01_01_01
7 用例描述: 测试天气提示刷新
8 前置条件:
9 打开天气APP
10 测试步骤:
11 1.后台设置今日天气为多云,查看App提示是否更新。
12 预期结果:
13 页面天气提示刷新为多云
14 测试环境: Phone
15 作者:xxx
16 日期:2019-01-08
17 #-----------------------------------------------------------------------
18 """
19
20 import unittest
21
22
23 class test_case_01_01_01_01(unittest.TestCase):
24
25 def setUp(self):
26 #TODO 添加用例执行前置条件
27 pass
28
29 def testRun(self):
30 #TODO 添加用例执行测试步骤
31 pass
32
33 def tearDown(self):
34 #TODO 添加恢复测试环境操作
35 pass
36
37 if __name__ == '__main__':
38 unittest.main()


7月份福利课来袭,心动就关注一下吧~