zoukankan      html  css  js  c++  java
  • 关键字驱动测试框架搭建(1)

    1、小练习:定义三个方法(加法、减法、断言),通过使用关键字驱动测试这个三个方法
    compute.py

    #encoding=utf-8
    
    def add(a,b):
        print a + b
        return a + b
    
    def sub(a,b):
        print a - b
        return a - b
    
    def assert_value(a,b):
        if a == b:
            return True
        else:
            return False

    testdata.txt文件
    add,1,2,3
    sub,2,1,1

    test_compute.py

    #encoding=utf-8
    from compute import *
    
    test_case_num = 0
    success_case_num = 0
    faile_case_num = 0
    with open("D:\PythonProject\MyTest\testdata.txt") as fp:
        for line in fp:
            test_case_num += 1
            action,data1,data2,expect_result = line.split(',')
            expect_result = eval(expect_result.strip())
            s = action + "(" + data1 + "," + data2 + ")"
            actual_result = eval(s)
            if assert_value(actual_result,expect_result):
                success_case_num += 1
            else:
                faile_case_num += 1
    
    print "total %s test cases ran " % test_case_num
    print "total %s succeeded test cases ran " % success_case_num
    print "total %s failed test cases ran " % faile_case_num

    上面的函数都是两个参数,如果函数的参数不同,有的一个,有的三个,有的没有,则需要优化拼接eval表达式,如:

    compute.py

     

    #encoding=utf-8
    import random
    import re
    #两个参数
    def add(a,b):
        print a + b
        return a + b
    #两个参数
    def sub(a,b):
        print a - b
        return a - b
    #三个参数
    def mul(a,b,c):
        print a*b*c
        return a*b*c
    #一个参数
    def abs_value(a):
        print abs(a)
        return abs(a)
    #无参数,返回值是一个随机,无法使用精确值断言,所以使用正则来断言
    def random_value():
        print random.randint(1,1000)
        return random.randint(1,1000)
    
    def assert_value(actual_result,expected_result):
        #将真实结果、期望结果强制转换为字符串类型
        actual_result = str(actual_result)
        expected_result = str(expected_result)
        #判断期望结果是否包含正则表达式
        if re.search(r"\|*|?",expected_result):
            #如果期望结果是正则表达式,则使用期望结果对真实结果进行匹配
            if re.match(expected_result,actual_result):
                return True
            else:
                return False
    
        #如果期望结果不是正则表达式,则直接断言是否相等
        if actual_result == expected_result:
            return True
        else:
            return False

    testdata.txt
    add,1,2,3
    sub,2,1,1
    mul,1,2,3,6
    abs_value,-1,1
    random_value,d+

    测试数据的第一行的第一个为函数名,最后一个为断言值,所以中间的均为参数,需要对切割开的数据进行判断长度,再取出切片(去头去尾,即只留参数),最后拼接成一个函数表达式。如:mul(1,2,3)
    test_comput.py

    #encoding=utf-8
    from compute import *
    
    test_case_num = 0
    success_case_num = 0
    faile_case_num = 0
    with open("D:\PythonProject\MyTest\testdata.txt") as fp:
        for line in fp:
            test_case_num += 1
            #切割出函数名
            func_name = line.split(",")[0].strip()
            #切割出参数再拼接成一个字符串
            values = ",".join(line.split(",")[1:-1]).strip()
            #切割出断言值
            expected_result = line.split(",")[-1].strip()
            #拼接成执行函数的表达式
            s = func_name + "(" + values + ")"
            #使用eval执行表达式,并将结果保存到actual_result
            actual_result = eval(s)
            #进行断言
            if assert_value(actual_result,expected_result):
                success_case_num += 1
            else:
                faile_case_num += 1
    
    print "total %s test cases ran " % test_case_num
    print "total %s succeeded test cases ran " % success_case_num
    print "total %s failed test cases ran " % faile_case_num
    
    #生成html测试报告
    content =Template("""
    <html>
    <head><title>光荣之路测试报告</title>
    <meta charset="utf-8" />
    </head>
    <table border="6">
    <caption>测试报告</caption>
    <tr>
      <td>运行的总用例数</td>
      <td>成功运行的总用例数</td>
      <td>失败运行的总用例数</td>
    </tr>
    <tr>
      <td>$num1</td>
      <td>$num2</td>
      <td>$num3</td>
    </tr>
    </table>
    </html>
    """)
    
    file_content = content.substitute(num1=test_case_num,num2=success_test_case,num3=faile_test_case
    )
    with open("result.html","w") as f:
        f.write(file_content)
  • 相关阅读:
    c#格林治时间实现
    K3WISE常用表
    读取单元格数据
    水晶报表使用方法
    vs2010下使用sqlite
    C#执行EXE程序
    SQLLITE HELPER
    SQL LITE安装
    C#多线程
    VS2012 快捷键
  • 原文地址:https://www.cnblogs.com/test-chen/p/11123692.html
Copyright © 2011-2022 走看看