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)

unittest(13)- 从配置文件中读取测试数据的更多相关文章

  1. Feign从配置文件中读取url

    Feign的url和name都是可配置的,就是从配置文件中读取的属性值,然后用占位符引用就可以了: ${rpc.url} @FeignClient(name = "me", url ...

  2. spring boot: 从配置文件中读取数据的常用方法(spring boot 2.3.4)

    一,从配置文件中读取数据有哪些方法? 通常有3种用法: 1,直接使用value注解引用得到配置项的值 2,  封装到Component类中再调用 3,  用Environment类从代码中直接访问 生 ...

  3. 【Python学习笔记七】从配置文件中读取参数

    将一些需要更改或者固定的内容存放在配置文件中,通过读取配置文件来获取参数,这样修改以及使用起来比较方便 1.首先是配置文件的写法如下一个environment.ini文件: 里面“[]”存放的是sec ...

  4. spring boot 项目从配置文件中读取maven 的pom.xml 文件标签的内容。

    需求: 将pom.xml 文件中的版本号读取到配置文件并打印到日志中. 第一步: 在pom.xml 中添加以下标签. 第二步: 将version 标签的值读取到配置文件中 这里使用 @@  而不是  ...

  5. 监听tomcat服务器启动/关闭并从配置文件中读取参数进行初始化

    监听tomcat服务器启动/关闭很简单(2步): 1. 建立一个类实现ServletContextListener接口,重写其中的方法(contextDestroyed和contextInitiali ...

  6. C# 从配置文件中读取/写入信息

    读取: var currMemberID = System.Configuration.ConfigurationManager.AppSettings["tolunaMemberID&qu ...

  7. 从配置文件中读取数据获取Connection

    配置文件 db.driver=com.mysql.jdbc.Driver db.url=jdbc\:mysql\://localhost\:3306/mybase db.user=root db.ps ...

  8. 在ASP.NET 5中读取配置文件

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 在ASP.NET 5中摒弃了之前配置文件的基础结构,引入了一个全新配置文件系统.今天推荐的文 ...

  9. java 如何从配置文件(.properties)中读取内容

    1.如何创建.properties文件 很简单,建立一个txt文件,并把后缀改成.properties即可 2.将.properties文件拷入src的根目录下 3..properties文件内容格式 ...

随机推荐

  1. 01 语言基础+高级:1-8 File类与IO流_day10【缓冲流、转换流、序列化流】

    day10[缓冲流.转换流.序列化流] 主要内容 缓冲流 转换流 序列化流 打印流 教学目标 能够使用字节缓冲流读取数据到程序 能够使用字节缓冲流写出数据到文件 能够明确字符缓冲流的作用和基本用法 能 ...

  2. Android Studio 停靠模式(Docked Mode)

    如果之前选了任务一种模式,先全都取消了 然后点击Window -->Active Tool Window-->这个时候就可以选择Docked Mode了

  3. 884A. Book Reading#抽空学习好孩子(模拟)

    题目出处:http://codeforces.com/problemset/problem/884/A 题目大意:每天时间分两部分,工作和学习,工作优先,闲暇读书,问第几天读完 #include< ...

  4. windows之anaconda导入torch失败和pip install命令执行read time out

    昨天用jupyter导入torch还好好的呢,今天用就不行了,先是ImportError: DLL load failed: 找不到指定的模块.再是No such comm target regist ...

  5. gcc -E xx.c

    C语言代码在交给编译器之前,会先由预处理器进行一些文本替换方面的操作,例如宏展开.文件包含.删除部分代码等. 在正常的情况下,GCC 不会保留预处理阶段的输出文件,也即.i文件.然而,可以利用-E选项 ...

  6. Spark宽依赖、窄依赖

    在Spark中,RDD(弹性分布式数据集)存在依赖关系,宽依赖和窄依赖. 宽依赖和窄依赖的区别是RDD之间是否存在shuffle操作. 窄依赖 窄依赖指父RDD的每一个分区最多被一个子RDD的分区所用 ...

  7. SAP AM:固定资产采购的预算管理

    对于很多公司来说,购买资产是公司年度支持的主要部分,因此需要用预算管理来防止过度支出.这项支出被列为资本支出,所以很多公司都需要对购买过程和安全防范进行良好的控制.以下文中说明如何在购买资产时使用预算 ...

  8. springboot的linux-docker部署

    将springboot jar应用打包成镜像并在docker运行成容器 https://blog.csdn.net/keepd/article/details/80569797 Docker安装(De ...

  9. 01 语言基础+高级:1-7 异常与多线程_day07 【线程池、Lambda表达式】

    day07[线程池.Lambda表达式] 主要内容 等待与唤醒案例 线程池 Lambda表达式 教学目标 -[ ] 能够理解线程通信概念-[ ] 能够理解等待唤醒机制-[ ] 能够描述Java中线程池 ...

  10. Python语言学习:pyc是什么

    一.pyc 1.PyCodeObject:是python编译器真正编译成的结果 当python程序运行时,编译的结果是保存在位于内存中的PyCodeObject中.当python程序运行结束时,pyt ...