case.config

# 1. http_request.py

import requests

class HttpRequest:
    def http_request(self, url, method, data=None, cookie=None):
        try:
            if method.upper() == "GET":
                res = requests.get(url, data, cookies=cookie)
            elif method.upper() == "POST":
                res = requests.post(url, data, cookies=cookie)
            else:
                print("请输入正确的参数")
        except Exception as e:
            print("请求报错了:{}".format(e))
            raise e
        return res
# 2.get_data7.py

from openpyxl import load_workbook
from day_20191202.config_data_depart.read_config import ReadConfig

class DoExcel:
    def __init__(self, file, sheet):
        self.file = file
        self.sheet = sheet

    def get_data(self, mode="all"):
        mode = ReadConfig().get_config("case.config", "MODE", "mode")
        wb = load_workbook(self.file)
        sheet = wb[self.sheet]
        case_data = []
        for i in range(2, sheet.max_row+1):
            sub_data = {}
            sub_data["case_id"] = sheet.cell(i, 1).value
            sub_data["url"] = sheet.cell(i, 2).value
            sub_data["method"] = sheet.cell(i, 3).value
            sub_data["data"] = eval(sheet.cell(i, 4).value)
            sub_data["expected"] = sheet.cell(i, 5).value
            case_data.append(sub_data)
        if mode == "all":
            final_data = case_data
        else:  # [1, 2, 5]
            final_data = []
            for test_data in case_data:  # 遍历每一条测试数据,如果测试数据的id在传入的列表中,就把这条数据加到final_data
                if test_data["case_id"] in eval(mode):
                    final_data.append(test_data)

        return final_data

if __name__ == "__main__":
    case_data = DoExcel("data_7.xlsx", "sh2").get_data()
    print(case_data)
# 3. read_config.py

import configparser

class ReadConfig:
    def get_config(self, file, section, option):
        cf = configparser.ConfigParser()
        cf.read(file, encoding="utf-8")
        return cf.get(section, option)

if __name__ == "__main__":
    r = ReadConfig().get_config("case.config", "MODE", "mode")
    print(r)
# 4. test_login.py

import unittest
from API_AUTO.tools.http_request import HttpRequest
from ddt import ddt, data, unpack
from day_20191202.config_data_depart.get_data7 import DoExcel
from day_20191202.config_data_depart.read_config import ReadConfig

# 自定义取某几条数据执行用例
# mode = ReadConfig().get_config("case.config", "MODE", "mode")
test_data = DoExcel("data_7.xlsx", "sh2").get_data()
# print(test_data)

@ddt
class TestLogin(unittest.TestCase):
    def setUp(self):
        print("start testing...")

    def tearDown(self):
        print("case done.")

    @data(*test_data)
    @unpack
    # 注意新的表格数据多了id,要用参数来接收case_id
    def test_api(self, case_id, url, method, data, expected):
        # print("url:", url)
        # print("method", method)
        # print("data_c", data)
        res = HttpRequest().http_request(url, method, data)
        r = res.json()["info"]
        try:
            self.assertEqual(r, expected)
        except AssertionError as e:
            print("there is an error in the case {}".format(e))
            raise e

if __name__ == '__main__':
    TestLogin().test_api()
# 5. run.py

import unittest
from day_20191202.config_data_depart.class_test_ddt import TestLogin
import HTMLTestRunner

suite = unittest.TestSuite()
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromTestCase(TestLogin))

with open("login7.html", "wb") as file:
    runner = HTMLTestRunner.HTMLTestRunner(stream=file,
                                           verbosity=2,
                                           title="登录7测试报告",
                                           description="管住心情,就是胜利")
    runner.run(suite)
# runner = unittest.TextTestRunner(verbosity=2)
# runner.run(suite)

最新文章

  1. 如何在删除ibdata1和ib_logfile的情况下恢复MySQL数据库
  2. Apworks框架实战(四):使用Visual Studio开发面向经典分层架构的应用程序:从EasyMemo案例开始
  3. 程序集与反射技术(C#)
  4. 沃罗诺伊图(Voronoi Diagram,也称作Dirichlet tessellation,狄利克雷镶嵌)
  5. C#使用IrisSkin2.dll美化WinForm程序界面
  6. python中的popen和subprocess
  7. 第三篇 从EXCEL电子表格到数据库
  8. 使用gulp、yeoman、bower建站
  9. Codeforces Round #330 (Div. 2) B. Pasha and Phone 容斥定理
  10. 懒加载 lazy load
  11. 【iOS知识学习】_iOS沙盒机制
  12. R2:获取一个event_base
  13. HBase--DependentColumnFilter(参考例过滤器 )详解
  14. 非root启动80端口
  15. python 全栈开发,Day3
  16. [SDOI 2010]外星千足虫
  17. 灵雀云受邀加入VMware 创新网络,共同助力企业数字化进程
  18. 来源于知乎专栏:https://zhuanlan.zhihu.com/p/29619457
  19. 加密算法(对称加密)AES、DES (非对称加密)RSA、DSA
  20. Android.mk(4) 依赖:目标编程的模式

热门文章

  1. mysql脚本文件
  2. UML-类图-需要写关联名称吗?
  3. UML-为什么要画领域模型?
  4. webstorm更换了项目启动后仍然是之前的项目(问题解决)
  5. C语言实现整数转字符串
  6. c++ 装饰器模式/包装模式
  7. 新服务器搭建-总结: 下载nginx,jdk8,docker-compose编排(安装mysql,redis) 附安装
  8. Centos内核更新
  9. TOJ-3474 The Big Dance(递归二分)
  10. hdu1069 Monkey and Banana LIS