012 python接口 数据驱动ddt

Posted 汁虫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了012 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。

 

以上是关于012 python接口 数据驱动ddt的主要内容,如果未能解决你的问题,请参考以下文章

python接口自动化--ddt数据驱动

Jmeter 参数化之数据驱动(ddt)

Python+unittest+DDT实现的数据驱动测试

python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告

python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告

数据驱动—ddt