ython学习笔记(接口自动化框架 V2.0)

这个是根据上次框架版本进行的优化

用python获取excel文件中测试用例数据

通过requets测试接口、并使用正则表达式验证响应信息内容

生成xml文件测试报告

版本更新内容:

1. 整理了CreateTest.test_main()流程逻辑

2. 优化了testcase.xls文件格式

3. 添加了生成XML文件测试报告

#!/usr/bin/env python
# -*- coding: utf_8 -*-
# 获取测试用例文件excel

import xlrd
import json


class CreateExcel:
    def __init__(self):
        pass

    @classmethod
    def open_excel(cls):
        path = "testcase.xls"
        workbook = xlrd.open_workbook(path)
        table = workbook.sheets()[0]
        return table

    # 获取sheet

    @classmethod
    def get_nrows(cls, table):
        nrows = table.nrows
        return nrows

    # 获取行号

    @classmethod
    def get_id(cls, table, nrows):
        testid = []
        for i in range(1, nrows):
            testid.append(table.cell(i, 0).value)
        return testid

    @classmethod
    def get_name(cls, table, nrows):
        testname = []
        for i in range(1, nrows):
            testname.append(table.cell(i, 1).value)
        return testname

    # 获取用例name

    @classmethod
    def get_data(cls, table, nrows):
        testdata = []
        for i in range(1, nrows):
            try:
                data = json.loads(table.cell(i, 2).value)
                testdata.append(data)
            except ValueError:
                testdata.append(None)
        return testdata

    # 获取data接口参数

    @classmethod
    def get_url(cls, table, nrows):
        testurl = []
        for i in range(1, nrows):
            testurl.append(table.cell(i, 3).value)
        return testurl

    # 获取接口测试url

    @classmethod
    def get_method(cls, table, nrows):
        testmethod = []
        for i in range(1, nrows):
            testmethod.append(table.cell(i, 4).value)
        return testmethod

    # 获取接口测试method

    @classmethod
    def get_pattern(cls, table, nrows):
        testpattern = []
        for i in range(1, nrows):
            testpattern.append(table.cell(i, 5).value)
        return testpattern

    # 获取接口期望响应结果
#!/usr/bin/env python
# -*- coding: utf_8 -*-
# 测试核心组件

import requests
import re
from datetime import datetime
from createexcel import CreateExcel
from xml.dom import minidom
import sys


class CreateTest:
    reload(sys)
    sys.setdefaultencoding("utf-8")

    # 避免字符串写入文件出错

    def __init__(self):
        pass

    @classmethod
    def test_api(cls, method, url, data):
        global results
        try:
            if method == "post":
                results = requests.post(url, data)
            if method == "get":
                results = requests.get(url, data)
            return results
        except Exception.__bases__:
            print "服务器访问失败"

    # 接口函数

    @classmethod
    def test_on(cls):
        print "用例执行开始"

    @classmethod
    def test_close(cls):
        print "用例执行结束"

    @classmethod
    def test_result(cls, pa):
        global report
        try:
            pattern = re.compile(pa)
            match = pattern.search(testresults.text)
            if match.group() == pa:
                report = "测试通过"
        except AttributeError:
            report = "测试失败"
        return report

    # 正则表达式检测

    @classmethod
    def test_http(cls, code):
        print "请求返回状态码: ", code

    @classmethod
    def test_time(cls):
        nowtime = datetime.today()
        time = nowtime.strftime("%Y-%m-%d %H:%M:%S")
        return time

    # 获取当前时间转化字符串

    @classmethod
    def test_report(cls):
        nowtime = datetime.today()
        reportime = nowtime.strftime("%Y%m%d%H%M%S")
        reportname = reportime + ".xml"
        return reportname

    # 获取测试报告文件名称

    @classmethod
    def test_main(cls):
        global testresults
        table = CreateExcel.open_excel()
        nrows = CreateExcel.get_nrows(table)
        xml = minidom.Document()
        xml.appendChild(xml.createComment("测试报告"))
        caselist = xml.createElement("caselist")
        xml.appendChild(caselist)
        for i in range(0, nrows - 1):
            testid = CreateExcel.get_id(table, nrows)[i]
            testname = CreateExcel.get_name(table, nrows)[i]
            testdata = CreateExcel.get_data(table, nrows)[i]
            testurl = CreateExcel.get_url(table, nrows)[i]
            testmethod = CreateExcel.get_method(table, nrows)[i]
            testpattern = CreateExcel.get_pattern(table, nrows)[i]

            # 执行测试
            CreateTest.test_on()
            testresults = CreateTest.test_api(testmethod, testurl, testdata)
            testcode = str(testresults.status_code)
            try:
                CreateTest.test_http(testresults.status_code)
            except AttributeError:
                pass
            CreateTest.test_close()
            # 执行结束
            # 生成xml文件
            case = xml.createElement("case")
            case.setAttribute("id", testid)
            # 输入用例ID

            name = xml.createElement("name")
            name.appendChild(xml.createTextNode(testname))
            # 输入用例名称
            method = xml.createElement("method")
            method.appendChild(xml.createTextNode(testmethod))
            # 输入接口类型
            code = xml.createElement("code")
            code.appendChild((xml.createTextNode(testcode)))
            # 输入用例返回状态码
            result = xml.createElement("result")
            result.appendChild(xml.createTextNode(CreateTest.test_result(testpattern)))
            # 输入用例测试结果
            time = xml.createElement("time")
            time.appendChild(xml.createTextNode(CreateTest.test_time()))
            # 输入用例执行时间

            case.appendChild(name)
            case.appendChild(method)
            case.appendChild(code)
            case.appendChild(result)
            case.appendChild(time)

            caselist.appendChild(case)
            # xml文件生成结束
        filename = file(CreateTest.test_report(), "w+")
        # 生成以当前时间命名的测试报告文件
        xml.writexml(filename)
        filename.close()
        # 关闭文件


if __name__ == '__main__':
    CreateTest.test_main()

 

下面是测试入口:

#!/usr/bin/env python
# -*- coding: utf_8 -*-
# ****************************************************************
# interface.py
# Author     : ChenLei
# Version    : 2.0
# Date       : 2016-4-15
# ****************************************************************

import time
from createtest import CreateTest

start = time.clock()
CreateTest.test_main()
end = time.clock()

print "接口自动化脚本运行时间:%.03f seconds" % (end - start)

 运行后自动生成 当前时间的xml文件 如下:

除非注明,本博客文章均为原创,转载请以链接形式标明本文地址

本文地址:http://www.cnblogs.com/cllovewxq/p/5394549.html

posted @ 2016-09-23 01:29  smallQSH  阅读(375)  评论(0编辑  收藏  举报