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

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

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

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

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

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

根据用例表批量生成脚本

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

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

# !/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()

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

 # !/usr/bin/env python
# -*- coding:utf-8 -*- """
#-----------------------------------------------------------------------
用例名称: case_01_01_01_01
用例描述: 测试天气提示刷新
前置条件:
打开天气APP
测试步骤:
1.后台设置今日天气为多云,查看App提示是否更新。
预期结果:
页面天气提示刷新为多云
测试环境: Phone
作者:xxx
日期:2019-01-08
#-----------------------------------------------------------------------
""" import unittest class test_case_01_01_01_01(unittest.TestCase): def setUp(self):
#TODO 添加用例执行前置条件
pass def testRun(self):
#TODO 添加用例执行测试步骤
pass def tearDown(self):
#TODO 添加恢复测试环境操作
pass if __name__ == '__main__':
unittest.main()

以上生成的脚本看起来就比较清晰了,再添加自己封装后的测试接口,整体结构上非常简洁明了。

批量生成python自动化测试脚本的更多相关文章

  1. jinja2批量生成python脚本

    ​ 在使用airflow的过程中需要大量的dag脚本进行性能测试,如果一个个去编写dag脚本未免太过麻烦,于是想到用python的jinja2模板引擎实现批量脚本生成. 先通过pip命令安装jinja ...

  2. excel 中批量生成mysql的脚本

    一.假设你的表格有A.B.C三列数据,希望导入到你的数据库中表格table,对应的字段分别是col1.col2.col3 二.在你的表格中增加一列,利用excel的公式自动生成sql语句,具体方法如下 ...

  3. java批量生成用例脚本-保留字关键词的用例脚本生成

    20171012新补丁包程序,程序整理了全部的关键字和保留字,支持 字段a = "字段b" 与 字段a = 字段b,并做了代码重构.对补丁包进行关键字专项测试,验证关键字保留字作为 ...

  4. MS SQL批量生成作业脚本方法介绍总结

    在迁移或升级SQL Server数据库服务器时,很多场景下我们不能还原msdb,所以我们必须手工迁移SQL Server相关作业.如果手工生成每一个作业的脚本话,费时又费力,其实SQL Server中 ...

  5. python脚本批量生成数据

    在平时的工作中,经常会遇到造数据,特别是性能测试的时候更是需要大量的数据.如果一条条的插入数据库或者一条条的创建数据,效率未免有点低.如何快速的造大量的测试数据呢?在不熟悉存储过程的情况下,今天给大家 ...

  6. Python批量生成用户名

    写在最前 平时在工作中尤其是在做压测的时候难免需要一些用户名和密码,写个简单的Python小脚本批量生成一些 代码示例 import random,string #生成大小字母和数字一起的大字符串 a ...

  7. 脚本工具(获取某个文件夹下的所有图片属性批量生成css样式)

    问题描述: 由于有一次工作原因,就是将某个文件夹下的所有图片,通过CSS描述他们的属性,用的时候就可以直接引用.但是我觉得那个文件夹下的图片太多,而且CSS文件的格式又有一定的规律,所有想通过脚本来生 ...

  8. shell脚本批量生成配置文件

    如果管理的站点和服务器较多的情况下,每次修改配置文件都相当痛苦.因而想到了用shell脚本来批量生成配置文件和配置数据.下面这个脚本是为了批量生成nagios监控配置文件的一个shell脚本程序.其原 ...

  9. ORA-02266错误的批量生成脚本解决方案

    ORA-02266: unique/primary keys in table referenced by enabled foreign keys这篇博客是很早之前总结的一篇文章,最近导数时使用TR ...

随机推荐

  1. 常用工具类——StringUtils

    /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreem ...

  2. 关于如何在服务器上搭建tomcat并发布自己的web项目

    最近在学习如何在服务起上搭建tomcat,并发布自己的项目,自己是花了一下午的时间才把里面的东西弄明白,各种百度,各种请教大神,真的是备受折磨啊.好了废话不多说,直接进入主题. 1:众所周知,tomc ...

  3. QT学习之事件处理

    Qt事件机制 Qt程序是事件驱动的, 程序的每个动作都是由幕后某个事件所触发.. Qt事件的发生和处理成为程序运行的主线,存在于程序整个生命周期. Qt事件的类型很多, 常见的qt的事件如下: 键盘事 ...

  4. redis 缓存用户账单策略

    最近项目要求分页展示用户账单列表,为提高响应使用redis做缓存,用到的缓存策略和大家分享一下. 需求描述:展示用户账单基本信息以时间倒序排序,筛选条件账单类型(所有,订单收入.提现.充值...). ...

  5. C# 释放资源的规范写法

    static class CSharp_3 { /* ---------------------------------------- * 以下学习资源的释放:IDispose和析构函数 * 1.ID ...

  6. TextView 垂直居中

     需要区分的是这里的top,bottom,ascent,descent,baseline是指字内容的属性,通过getPaint().getFontMetricsInt()来获取得到.和字体内容的外部容 ...

  7. 编写高质量代码改善C#程序的157个建议——建议70:避免在调用栈较低的位置记录异常

    建议70:避免在调用栈较低的位置记录异常 并不是所有的异常都要被记录到日志,一类情况是异常发生的场景需要被记录,还有一类就是未被捕获的异常.未被捕获的异常通常被视为一个Bug,所以,对于它的记录,应该 ...

  8. SocketAsyncEventArgs

    SocketAsyncEventArgs是.net提供的关于异步socket类,封装了IOCP的使用,可以用它方便的实现NIO(non-blocking IO) NIO对于提升某些场景下Server性 ...

  9. POJ 3660 Cow Contest(传递闭包)

    N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a programming contest. As we ...

  10. Duplicate entry '127' for key 'PRIMARY'的解决方法

    如果这个时候数据表里面没有数据,而且我们用使用 INSERT INTO VALUES 这样的语句插入,就会提示 Duplicate entry '127' for key 'PRIMARY'