往往我们需要通过数据集合直接驱动应用,这里通过循序渐进的三种方式来描述。

1. 通过csv获取数据并驱动应用

baidu_data.csv文件如下:

name,search_key
case1,selenium
case2,unittest
case3,parameterized

test1_baidu_data.py文件如下:

import csv
import codecs
import unittest
from time import sleep
from itertools import islice
from selenium import webdriverclass TestBaidu(unittest.TestCase):@classmethoddef setUpClass(cls):cls.driver = webdriver.Chrome()cls.base_url = "https://www.baidu.com"@classmethoddef tearDownClass(cls):cls.driver.quit()def baidu_search(self, search_key):self.driver.get(self.base_url)self.driver.find_element_by_id("kw").send_keys(search_key)self.driver.find_element_by_id("su").click()sleep(3)def test_search(self):with codecs.open('baidu_data.csv', 'r', 'utf_8_sig') as f:data = csv.reader(f)for line in islice(data, 1, None):search_key = line[1]self.baidu_search(search_key)if __name__ == '__main__':unittest.main(verbosity=2)

结果:打开百度浏览器后,依次输入关键字selenium,unittest,parameterized,依次得到三个搜索界面。

缺点:如果有一个数据没有获取到就会影响后续数据的解析。

2.将数据获取后存储到数组中,再创建不同测试方法使用数据

import csv
import codecs
import unittest
from time import sleep
from itertools import islice
from selenium import webdriverclass TestBaidu(unittest.TestCase):@classmethoddef setUpClass(cls):cls.driver = webdriver.Chrome()cls.base_url = "https://www.baidu.com"cls.test_data = []with codecs.open('baidu_data.csv', 'r', 'utf_8_sig') as f:data = csv.reader(f)for line in islice(data, 1, None):cls.test_data.append(line)@classmethoddef tearDownClass(cls):cls.driver.quit()def baidu_search(self, search_key):self.driver.get(self.base_url)self.driver.find_element_by_id("kw").send_keys(search_key)self.driver.find_element_by_id("su").click()sleep(3)def test_search_selenium(self):self.baidu_search(self.test_data[0][1])def test_search_unittest(self):self.baidu_search(self.test_data[1][1])def test_search_parameterized(self):self.baidu_search(self.test_data[2][1])if __name__ == '__main__':unittest.main(verbosity=2)

结果:先测试parameterized--selenium--unittest

3. 使用Parameterized实现参数化

1)安装parameterized

pip install parameterized

2)实现百度搜索的测试

import unittest
from time import sleep
from itertools import islice
from selenium import webdriver
from parameterized import parameterizedclass TestBaidu(unittest.TestCase):@classmethoddef setUpClass(cls):cls.driver = webdriver.Chrome()cls.base_url = "https://www.baidu.com"@classmethoddef tearDownClass(cls):cls.driver.quit()def baidu_search(self, search_key):self.driver.get(self.base_url)self.driver.find_element_by_id("kw").send_keys(search_key)self.driver.find_element_by_id("su").click()sleep(2)# 通过Parameterized实现参数化,case1--定义测试用例的名称,selenium--定义搜索的关键字@parameterized.expand([("case1", "selenium"),("case2", "unittest"),("case3", "parameterized"),])def test_search(self, name, search_key):self.baidu_search(search_key)self.assertEqual(self.driver.title, search_key + "_百度搜索")if __name__ == '__main__':#执行更详细的执行日志unittest.main(verbosity=2)

步骤1)导入Parameterized

2)通过@parameterized.expand()装饰测试用例

3)使用unittest的main方法,设置verbosity参数为2,输出更详细的执行日志。

得到的结果如下:

通过@parameterized.expand()中元组的个数来统计测试用例数,产生3条测试用例。

Selenium3自动化测试——21.数据驱动应用相关推荐

  1. Selenium3自动化测试【21】find_element定位元素

    前面连载的内容,我们介绍了如下8种定位元素的方法. find_element_by_id:通过元素的ID属性值来定位元素: find_element_by_name:通过元素的name属性值来定位元素 ...

  2. python3 selenium_Python3+Selenium3自动化测试-(准备)

    Python3+Selenium3自动化测试-(准备) 最近在学习selenium自动化测试相关的内容,所以将实际准备情况做一记录, # 系统:win10(64位) # 浏览器:Chrome(67.0 ...

  3. 自动化测试和数据驱动之间的关系,十分钟带你弄清楚

    软件测试是对项目研发过程的产物(文档,代码等)进行审查,保障产品质量的过程.我们可以通过手工测试,自动化测试,工具扫描等方法完成这个任务.其中,自动化测试是当前重要的一种测试方法,具有响应速度快.稳定 ...

  4. Selenium3自动化测试【35】执行JS脚本(2)

    1.引言 当单击某链接时,单击的链接有时不是在原标签页上实现跳转,而是新打开一个标签页.如何实现在多个窗口间进行切换呢? 现在很多网站开发都在使用HTML5,如何利用Selenium处理常用的HTML ...

  5. Python3+Selenium3自动化测试框架——②流程梳理及代码封装

    Python3+Selenium3自动化测试框架--①基本步骤 对之前的步骤进行 一.流程梳理以及功能封装 register_code.py # coding=utf-8 import json im ...

  6. 基于python的界面自动化测试-基于python的接口自动化测试+ddt数据驱动

    在测试接口时,一个接口会先写好测试用例,这个用例主要针对功能,传入参时考虑到各种场景,正常的,异常的,如:参数缺省,参数传一个六位数字写用例时考虑边界情况等. 一个接口设计用例时有可能会十几条到几十条 ...

  7. 【Web自动化测试——代码篇十二】自动化测试模型——数据驱动测试和关键字驱动测试...

    自动化测试模型可以看作自动化测试框架与工具设计的思想.随着自动化测试技术的发展,演化为以下几种模型: 线性测试 模块化驱动侧式 数据驱动测试 关键字驱动测试 数据驱动测试 前一篇所讲的模块化驱动测试能 ...

  8. 自动化测试框架-数据驱动(1)

    1.数据驱动概述 相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离,这样的测试脚本设计模式称为数据驱动. 例如:测试网站的登录功能,自动化测试工程师想验证不同的用户名和密码在网站登录 ...

  9. python自动化测试实战 虫师_关于《Selenium3自动化测试实战--基于python语言》

    2016年1月,机缘巧合下我出版了<Selenium2自动化测试实战--基于python语言>这本书,当时写书的原因是,大部分讲Selenium的书并不讲编程语言和单元测试框,如果想在项目 ...

最新文章

  1. 大连理工计算机专业导师,大连理工大学计算机科学与技术学院研究生导师简介-申彦明...
  2. 使用Ant实现打包jar包上传到服务器
  3. CSS元素高度塌陷的几种常见解决办法!
  4. Android----Google code android开源项目(四)
  5. 【开源项目】基于FFmpeg的封装格式转换
  6. Spring MVC实现Junit Case
  7. 终于搞懂了网红主播的套路
  8. paip.提升用户检验-----列表摘要
  9. c语言程序设计自考真题,自学考试《C语言程序设计》随堂试题及答案
  10. [译] iOS 11:机器学习人人有份
  11. 斗鱼实名认证 mysql_我告诉你斗鱼实名认证怎么取消
  12. 基于arduino WS2812b RGB灯带控制程序一
  13. 设置cookie存活时间_Cookie所有知识点
  14. GAMES101-现代计算机图形学入门
  15. 【基于ARM cortex-A53的音视频】
  16. 别让你20多岁的活法,毁掉你30岁后的人生
  17. Python 笑脸抓拍
  18. 加拿大移民政策利好,哪些人适合移民加拿大
  19. fatal error: zlib.h: No such file or directory
  20. 区块链学习:区块链分类

热门文章

  1. SpringMVC:如何保证Controller的并发安全
  2. Spring Boot 2.x基础教程:事务管理入门
  3. 使用 LocalDateTime 而不是 Date
  4. Java 8 Stream Api 中的 skip 和 limit 操作
  5. 我说分布式事务之最大努力通知型事务
  6. 永久代内存java_Java8内存模型—永久代(PermGen)和元空间(Metaspace)
  7. 我对软件设计原则的理解
  8. c++调用python返回字典
  9. OpenglES2.0 Android:画矩形
  10. dlib 68个关键点 人脸姿态