第一种,测试数据放在Excel里面

test_Login:

  1. import unittest
    import time
    import ddt
    import os
    from selenium import webdriver
    from SWYJR.common.readexcel import ExcelUtil
    from SWYJR.encapsulation.LoginPage import Login
  2.  
  3. # # 获取xlsx路径
    # curpath = os.path.dirname(os.path.realpath(__file__))
    # testxlsx = os.path.join(curpath, "demo_api.xlsx")
    #
    # # 复制demo_api.xlsx文件到report下
    # report_path = os.path.join(os.path.dirname(curpath), "report")
    # reportxlsx = os.path.join(report_path, "result.xlsx")
    # sheetName = "登录"
    # testdata = readexcel.ExcelUtil(testxlsx, sheetName).dict_data()
  4.  
  5. excel = ExcelUtil("testdata.xlsx", "登录")
    print(excel.dict_data())
    datas = excel.dict_data()
  6.  
  7. @ddt.ddt
    class LogIn(unittest.TestCase):
    ''' 登录测试 '''
  8.  
  9. def setUp(self):
    self.driver = webdriver.Firefox()
    self.login = Login(self.driver)
    self.login.login_before() # 调前置条件
  10.  
  11. def tearDown(self):
    self.driver.quit()
  12.  
  13. @ddt.data(*datas)
    def test_login(self, data):
    self.login.login(data['userName'], data['psw'])
    self.text = self.login.exit_button()
    self.assertIn(data['result'], self.text)
  14.  
  15. if __name__ == "__main__":
    unittest.main()

readExcel:

  1. # coding:utf-8
    import xlrd
    class ExcelUtil():
  2.  
  3. def __init__(self, excelPath, sheetName):
    #def __init__(self, excelPath, sheetName):
    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
  4.  
  5. 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
  6.  
  7. if __name__ == "__main__":
    # filepath = "D:\\test\\web-project\\5ke\\testdata.xlsx"
    filepath = "E:\\testdata.xlsx"
    sheetName = "登录"
    data = ExcelUtil(filepath, sheetName)
    print(data.dict_data())

第二种,搭建个数据库,测试数据放在数据库里面,如:MySQL(个人比较喜欢用数据库的方式做数据分离)

导入第三方库pymysql,进行二次封装

  1. import unittest, ddt, urllib3
    from interfaces.Process import login
    from common.MySQL import MysqlUtil
    urllib3.disable_warnings()
  2.  
  3. # 拿测试数据
    datas = MysqlUtil("SELECT explanation, userName, password, expect FROM Login").mysql_getrows()
    # print(datas)
  4.  
  5. @ddt.ddt
    class LogIn(unittest.TestCase):
    ''' 登录测试 '''
  6.  
  7. @ddt.data(*datas)
    def test_login(self, data):
    ''' 测试用例 '''
    self.user = data[1]
    print(f'\n用户名:{self.user}')
  8.  
  9. self.password = data[2]
    print(f'\n密码:{self.user}')
  10.  
  11. loginResult = login(self.user, self.password)[0]
    print(f'\n预期结果: {data[3]} \n执行结果: {loginResult}')
  12.  
  13. self.assertEqual(loginResult, data[3])
  14.  
  15. if __name__=='__main__':
    unittest.main()

python+selenium九:ddt数据驱动的更多相关文章

  1. Python+Selenium+Unittest+Ddt+HTMLReport分布式数据驱动自动化测试框架结构

    1.Business:公共业务模块,如登录模块,可以把登录模块进行封装供调用 ------login_business.py from Page_Object.Common_Page.login_pa ...

  2. python自动化测试之DDT数据驱动

    时隔已久,再次冒烟,自动化测试工作仍在继续,自动化测试中的数据驱动技术尤为重要,不然咋去实现数据分离呢,对吧,这里就简单介绍下与传统unittest自动化测试框架匹配的DDT数据驱动技术. 话不多说, ...

  3. python Unittest+excel+ddt数据驱动测试

    #!user/bin/env python # coding=utf- # @Author : Dang # @Time : // : # @Email : @qq.com # @File : # @ ...

  4. python自动化测试中的数据驱动unittest+ddt

    ddt是一个unittest的插件,用来实现uniitest的数据驱动 本文以python自动化测试中的数据驱动为原则,记录学习ddt的过程 一.数据的传递规则

  5. 基于Python的接口自动化-unittest测试框架和ddt数据驱动

    引言 在编写接口自动化用例时,我们一般针对一个接口建立一个.py文件,一条接口测试用例封装为一个函数(方法),但是在批量执行的过程中,如果其中一条出错,后面的用例就无法执行,还有在运行大量的接口测试用 ...

  6. 【python】以souhu邮箱为例学习DDT数据驱动测试

    前言 DDT(Data-Driven Tests)是针对 unittest 单元测试框架设计的扩展库.允许使用不同的测试数据来运行一个测试用例,并将其展示为多个测试用例.通俗理解为相同的测试脚本使用不 ...

  7. Python+Selenium笔记(九):操作警告和弹出框

    #之前发的 driver.switch_to_alert() 这句虽然可以运行通过,但是会弹出警告信息(这种写法3.x不建议使用)  改成 driver.switch_to.alert就不会了. (一 ...

  8. python+unittest+ddt数据驱动进行接口自动化测试

    所谓数据驱动测试,简单的理解为数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变.通过使用数据驱动测试的方法,可以在需要验证多组数据测试场景中,使用外部数据源实现对输入输出与期望值的参数化,避 ...

  9. 如何快速掌握DDT数据驱动测试?

    1.前言 (网盗概念^-^)相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离, 这样的测试脚本设计模式称为数据驱动.(网盗结束)当我们测试某个网站的登录功能时,我们往往会使用不同的用 ...

随机推荐

  1. js之string操作符

    1.字符方法 // 输出索引值的字符 'zhangamie'.charAt(2) // "a" 'zhangamie'[2] //"a" // 输出编码 a的a ...

  2. 函数和常用模块【day06】:random模块(三)

    本节内容 1.简述 2.random模块 3.string模块 4.生成随机数 一.简述 我们经常会使用一些随机数,或者需要写一些随机数的代码,今天我们就来整理随机数模块:random模块 二.ran ...

  3. Hadoop记录-MRv2(Yarn)运行机制

    1.MRv2结构—Yarn模式运行机制 Client---客户端提交任务 ResourceManager---资源管理 ---Scheduler调度器-资源分配Containers ----在Yarn ...

  4. MySQL邮件使用情况统计方法

    邮件使用情况统计方法如下: ) AS domain, COUNT(DISTINCT [column_name]) AS mail_count, COUNT([column_name]) AS mail ...

  5. python 代码模板

    命令[python3 -m pydoc -p 1234]   通过http://localhost:1234来访问查看文档 # -*- coding: utf-8 -*-""&qu ...

  6. Java实现DOS中的Copy命令

    import java.io.*; import java.util.Scanner; public class fileCopy { public static void main(String [ ...

  7. .NET面试题系列(十四)锁

    锁 分布式锁 如何解决分布式锁超时问题 我们可以让获得锁的线程开启一个守护线程,用来给快要过期的锁“续航” 当过去了29秒,线程A还没执行完,这时候守护线程会执行expire指令,为这把锁“续命”20 ...

  8. .NET面试题系列(十三)Lucene底层原理

    索引原理 全文检索技术由来已久,绝大多数都基于倒排索引来做,曾经也有过一些其他方案如文件指纹.倒排索引,顾名思义,它相反于一篇文章包含了哪些词,它从词出发,记载了这个词在哪些文档中出现过,由两部分组成 ...

  9. 重定向printf

    #include "stdio.h" #ifdef __GNUC__#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)#else# ...

  10. 16. Spring boot 错误页面

      默认效果:1).浏览器,返回一个默认的错误页面 1.1 请求头 1.2返回结果 2).如果是其他客户端,默认响应一个json数据 2.1请求头 2.2返回结果 { "timestamp& ...