• 013 python接口 数据驱动ddt


    '''
    时间:2018/11/05
    目录: 
      一: 安装ddt
      二: 禅道登录 
            1 工程结构
            2 unittest文件
            3 实现功能文件
            4 执行结果
      三: 使用excel
            1 安装xlrd
            2 准备测试数据
      四: 禅道登录
    1 工程结构 2 unittest文件 3 实现功能文件
    4 read_excel.py 5 执行结果
    '''

    一: 安装ddt

    1 : 运行输入"cmd",进入Dos窗口。

    2 : 输入"pip install ddt"(安装ddt模块)。

    1 : 输入"pip list"(查看安装的库)。

    2 : 可以看见已经安装了ddt(1.2.0)。

    1 : 输入"pip show ddt"(查看ddt的信息)。


    二: 禅道登录
      1 工程结构

      2 unittest文件

    # coding:utf-8
    import unittest
    import ddt
    import requests
    
    from DataDriver.chandao_login_api import *
    
    data = [{"user": "admin", "psw": "123456", "expect": True},
            {"user": "admin2", "psw": "123456", "expect": False},
            {"user": "admin", "psw": "123456", "expect": True},
            {"user": "admin4", "psw": "123123", "expect": False}
            ]
    
    
    @ddt.ddt
    class Test(unittest.TestCase):
        def setUp(self):
            self.session = requests.session()
    
        def tearDown(self):
            self.session.cookies.clear()    # 清除缓存 - cookies
            self.session.close()            # 去除警告 - 关闭进程
    
        @ddt.data(*data)    # *data : 分组传送 - 字典类型
        def test_001(self, testData):
            strUser = testData["user"]
            strPass = testData["psw"]
            strResult = Login(self.session, strUser, strPass)
            bResult = DecideResult(strResult)
            self.assertTrue(bResult == testData["expect"])
    
    
    if __name__ == '__main__':
        unittest.main()

      3 实现功能文件

    # coding:utf-8
    import requests
    
    
    url = "http://127.0.0.1/zentao/user-login.htm"  # url经常变 : 做全局变量 - 做配置文件
    
    def Login(session, strUser, strPass):
        '''
        登录禅道
        :param session:     session
        :param strUser:     用户名
        :param strPass:     密码
        :return:            请求结果 - 服务端
        '''
    
        body = {
            "account": strUser,
            "password": strPass,
            "keepLogin[]": "on",
            "referer": "/zentao/my.html"
        }
        r = session.post(url, data = body)
        strResult = r.content.decode("utf-8")
        return strResult
    
    
    def DecideResult(strResult):
        '''
        判断结果 - 登录禅道
        :param strResult:  请求结果 - 服务端
        :return:           True - 登录成功 
                           Fasle - 登录失败 
        '''
        if "登录失败" in strResult:
            print("登录失败")
            return False
        elif "parent.location" in strResult:
            print("登录成功")
            return True
        else:
            print("登录失败 - 其他情况")
            return False
    
    
    if __name__ == '__main__':
        s = requests.session()
        result = Login(s, "admin", "123456")
        DecideResult(result)

      4 执行结果

    1 :  测试用例全部运行pass。

    1 :  测试用例有failed。


    三: 使用excel
      1 安装xlrd

    1 : 运行输入"cmd",进入Dos窗口。

    2 : 输入"pip install xlrd"(安装xlrd模块)。

    1 : 输入"pip list"(查看安装的库)。

    2 : 可以看见已经安装了xlrd(1.1.0)。


      2 准备测试数据

     

    1 : 创建excel文件,命名为testData。

    2 : 填写测试数据。

    四: 禅道登录
      1 工程结构


      2 unittest文件

    # coding:utf-8
    import unittest
    import ddt
    import requests
    from DataDriver.chandao_login_api import *
    from DataDriver.read_excel import ExcelUtil
    
    
    data = ExcelUtil("testData.xlsx", "Sheet1")
    data = data.dict_data()
    print(data)
    
    @ddt.ddt
    class Test(unittest.TestCase):
        def setUp(self):
            self.session = requests.session()
    
        def tearDown(self):
            self.session.cookies.clear()    # 清除缓存 - cookies
            self.session.close()            # 去除警告 - 关闭进程
    
        @ddt.data(*data)    # *data : 分组传送 - 字典类型
        def test_001(self, testData):
    
            strUser = testData["user"]
            strPass = testData["psw"]
            strResult = Login(self.session, strUser, strPass)
            bResult = DecideResult(strResult)
            self.assertTrue(str(bResult) == testData["expect"])
    
    
    if __name__ == '__main__':
        unittest.main()

      3 实现功能文件

    # coding:utf-8
    import requests
    
    
    url = "http://127.0.0.1/zentao/user-login.htm"  # url经常变 : 做全局变量 - 做配置文件
    
    def Login(session, strUser, strPass):
        '''
        登录禅道
        :param session:     session
        :param strUser:     用户名
        :param strPass:     密码
        :return:            请求结果 - 服务端
        '''
    
        body = {
            "account": strUser,
            "password": strPass,
            "keepLogin[]": "on",
            "referer": "/zentao/my.html"
        }
        r = session.post(url, data = body)
        strResult = r.content.decode("utf-8")
        return strResult
    
    
    def DecideResult(strResult):
        '''
        判断结果 - 登录禅道
        :param strResult:  请求结果 - 服务端
        :return:
        '''
        if "登录失败" in strResult:
            print("登录失败")
            return False
        elif "parent.location" in strResult:
            print("登录成功")
            return True
        else:
            print("登录失败 - 其他情况")
            return False
    
    
    if __name__ == '__main__':
        s = requests.session()
        result = Login(s, "admin", "123456")
        DecideResult(result)

      4 read_excel.py

    # coding:utf-8
    import xlrd
    class ExcelUtil():
        def __init__(self, excelPath, sheetName="Sheet1"):
            self.data = xlrd.open_workbook(excelPath)
            self.table = self.data.sheet_by_name(sheetName)
    
            # 获取第一行作为key值
            self.keys = self.table.row_values(0)
            # 获取总行数
            self.rowNum = self.table.nrows
            # 获取总列数
            self.colNum = self.table.ncols
    
        def dict_data(self):
            if self.rowNum <= 1:
                print("总行数小于1")
            else:
                r = []
                j=1
                for i in range(self.rowNum-1):
                    s = {}
                    # 从第二行取对应values值
                    values = self.table.row_values(j)
                    for x in range(self.colNum):
                        s[self.keys[x]] = values[x]
                    r.append(s)
                    j+=1
                return r
    
    if __name__ == "__main__":
        filepath = "testData.xlsx"
        sheetName = "Sheet1"
        data = ExcelUtil(filepath, sheetName)
        print(data.dict_data())

      5 执行结果

    1 :  测试用例全部运行pass。

    1 :  测试用例有failed。

  • 相关阅读:
    Windows 创建 Redis 和 zookeeper 系统服务
    mysql 5.7 非正常安装,无法启动 服务没有报告任何错误
    将整个 project 资源打包
    使用Nexus3搭建Maven私服+上传第三方jar包到本地maven仓库
    所有子模块都要执行的checkstyle检查
    把项目通过maven生产源码包和文档包并发布到自己的私服上
    C#.NET常见问题(FAQ)-在VS程序如何取消.vshost的进程
    C#.NET常见问题(FAQ)-无法直接启动带有类库输出类型的项目怎么办
    C#.NET常见问题(FAQ)-VS如何整个项目中查找字符串
    C#.NET常见问题(FAQ)-如何在系统变量中加入新的环境变量
  • 原文地址:https://www.cnblogs.com/huafan/p/9906821.html
Copyright © 2020-2023  润新知