Selenium+Python:excel、xml参数化测试用例

原创 2018年04月17日 20:46:42

1.      环境

操作系统

Win10

IDE

Eclipse (Oxygen 4.7)+ PyDev 5.9.2 (JDK1.8)

PyCharm Community Edition 2018.1

Python

3.5

Selenium

selenium-3.9.0-py2.py3-none-any.whl

Openpyxl

2.5.2

FirefoxDriver

0.20.0

Firefox浏览器

59.0.2(32位)

ChromeDriver

2.34

Chrome浏览器

63.0.3239.84

  

    还是基于上回说的参数化测试用例类来实现的,稍稍改动了一下。

 

2.      参数化测试用例类

    由于从读入参数是字符串,因此测试用例中需要根据字符串生成webdriver。这个方法被提取到测试用例类的父类ParametrizedTestCase中,这样做不是太优雅,暂时先这样吧。

import unittest
from selenium import webdriver

class ParametrizedTestCase(unittest.TestCase):
    def __init__(self, methodName='runTest', param1=None,param2=None,param3=None):
        super(ParametrizedTestCase, self).__init__(methodName)
        self.param1 = param1
        self.param2 = param2
        self.param3 = param3

    @staticmethod
    def parametrize(classname,casename=None, param1=None,param2=None,param3=None):
        suite = unittest.TestSuite()

        if casename == None:
            testloader = unittest.TestLoader()
            casenames = testloader.getTestCaseNames(classname)
            suite = unittest.TestSuite()
            for casename in casenames:
                suite.addTest(classname(casename, param1, param2, param3))
        else:
            suite.addTest(classname(casename, param1, param2, param3))

        return suite

    def createDriver(self):
        driver = None
        if self.param1 == "Chrome":
            driver = webdriver.Chrome()
        elif self.param1 == "Firefox":
            driver = webdriver.Firefox()
        else:
            driver = webdriver.Ie()

        return driver


3.      测试用例类

    测试用例类,就只看一下Baidu吧,Youdao类似。先判断一下,传入的参数是否为一个str对象,如果是就调用父类的createDriver()创建一个webdriver对象。

import time
from ParametrizedTestCase import ParametrizedTestCase

class Baidu(ParametrizedTestCase):
    def test_baidu_search(self):
        if isinstance(self.param1, str):
            driver = self.createDriver()
            driver.get(self.param2)
            driver.find_element_by_id("kw").send_keys(self.param3)
            driver.find_element_by_id("su").click()
            time.sleep(5)
            driver.quit()
        else:
            self.param1.get(self.param2)
            self.param1.find_element_by_id("kw").send_keys(self.param3)
            self.param1.find_element_by_id("su").click()


4.      测试集文件

4.1    用excel文件参数化

4.1.1    excel文件

    一行就是一个用例,包括浏览器、url和查询用的关键字3列。

    


4.1.2    代码

    加载excel文件,获取到其第一个sheet,遍历这个sheet,读取每一行的每个单元格的值,用以参数化用例。

import openpyxl
import unittest

from ParametrizedTestCase import ParametrizedTestCase
from Baidu import Baidu
from Youdao import Youdao

filename = r"..\excel\测试参数.xlsx"
wb = openpyxl.load_workbook(filename)
ws = wb.worksheets[0]

suite = unittest.TestSuite()
for i in range(2, ws.max_row+1):
    if "baidu" in ws.cell(i,2).value:
        suite.addTest(ParametrizedTestCase.parametrize(Baidu, None, 
                                       ws.cell(i,1).value, ws.cell(i,2).value, ws.cell(i,3).value))
    elif "youdao" in ws.cell(i,2).value:
        suite.addTest(ParametrizedTestCase.parametrize(Youdao, None,
                                       ws.cell(i,1).value, ws.cell(i,2).value, ws.cell(i,3).value))


4.2    用xml文件参数化

4.2.1    xml文件

    xml文件很简单,根节点为testsuites,其子节点为一个个测试集testsuite,这里只有一个名为search的测试集。测试集的子节点当然就是测试用例testcase,包含3个测试用例参数子节点。

<?xml version="1.0" encoding="utf-8"?>
<testsuites>
    <testsuite name="search">
        <testcase>
            <explorer>Chrome</explorer>
            <url>https://www.baidu.com/</url>
            <key>Selenium</key>
        </testcase>
        <testcase>
            <explorer>Chrome</explorer>
            <url>http://www.youdao.com/</url>
            <key>parameter</key>
        </testcase>
        <testcase>
            <explorer>Firefox</explorer>
            <url>https://www.baidu.com/</url>
            <key>Selenium</key>
        </testcase>
        <testcase>
            <explorer>Firefox</explorer>
            <url>http://www.youdao.com/</url>
            <key>parameter</key>
        </testcase>
     </testsuite>
</testsuites>


4.2.2    代码

    加载xml文件,在根节点下寻找name为search的子节点,找到后遍历该节点的子节点,即测试用例节点,获取其中的参数参数化用例。

import xml.etree.ElementTree as ET
import unittest

from ParametrizedTestCase import ParametrizedTestCase
from Baidu import Baidu
from Youdao import Youdao

xmlfile = r"..\xml\testsuite.xml"
tree = ET.parse(xmlfile)

suite = unittest.TestSuite()
for child in tree.getroot():
    if child.get("name") == "search":
        for grandchild in child:
            if "baidu" in grandchild.find("url").text:
                suite.addTest(ParametrizedTestCase.parametrize(Baidu,None,grandchild.find("explorer").text,
                                                grandchild.find("url").text,grandchild.find("key").text))
            elif "youdao" in grandchild.find("url").text:
                suite.addTest(ParametrizedTestCase.parametrize(Youdao,None,grandchild.find("explorer").text,
                                                grandchild.find("url").text,grandchild.find("key").text))
    else:
        break

5.      参考文献

[1] python unittest单元测试框架中,如何对一个testcase参数化,具体如何实现https://zhidao.baidu.com/question/810879195120873612.html

Python+Selenium利用Excel做参数化

# -*- coding: utf-8 -*- import xlrd def excel_data( ):     data = xlrd.open_workbook("D:/data/t...
  • qq_21440921
  • qq_21440921
  • 2017-12-27 16:50:36
  • 71

Selenium + Python的Excel数据参数化

原文地址:http://blog.csdn.net/deadwalk/article/details/51332148
  • yzl11
  • yzl11
  • 2016-10-16 21:08:40
  • 3611

基于 Excel 参数化你的 Selenium2 测试代码

在测试过程中直接读取本地excl文件中的数据,一方面,将数据存放本地进行测试非常方便,不需要在代码中一个一个传参;另一方面,简化了代码,是你的测试代码看起来非常简洁易懂。今天我们就如何使用 xlrd ...
  • MTbaby
  • MTbaby
  • 2017-08-31 09:39:01
  • 496

【提问答疑】Selenium + Python的Excel数据参数化

背景最近一段时间微信公众号得到了众多网友的留言,微信编辑部的小编们欣喜若狂,在此感谢各位小伙伴们的厚爱。为了与大家进行互动交流,小编认真地查看每一条小伙伴们的留言,有问Fiddler抓包工具的问题,有...
  • Deadwalk
  • Deadwalk
  • 2016-05-06 15:39:50
  • 4670

testlink测试用例导出xml,转为Excel格式(python)

领导想要查看redmine的任务完成情况,本人就编写了一套脚本,请大家指点
  • xianjie0318
  • xianjie0318
  • 2017-02-23 20:44:14
  • 1262

Appium 自动化用例设计(Excel 配置篇)

在前面的章节中我介绍了如何用TESTNG 编官吏测试用例,相信大家看了代码都会提相同的问题,这样写脚本脚本量大太,如期去做自动化还不如我手工测试来得更高效 所以我在这基础上研究了一套关键字驱...
  • wanglha
  • wanglha
  • 2015-09-02 13:17:57
  • 2495

excel转换为xml测试用例

  • 2016年02月05日 13:48
  • 2.49MB
  • 下载

TestNG参数化测试之Excel读取数据

1、新建Excel文档,准备好测试数据 在当前工程的resources目录下,新建文件名为testdata的Excel文档 打开Excel,将当前sheet重命名为calculator,构造n...
  • testdeveloper
  • testdeveloper
  • 2016-05-18 21:37:55
  • 5439

qtp参数化-通过excel导入到datatable中

1.说明:sheet1 是EXCEL的标签页 actiion1是QTP DATATABLE的标签页 DataTable.ImportSheet "C:\login.xls", "sheet1", ...
  • krise00
  • krise00
  • 2013-11-28 16:20:02
  • 1354

selenium+python测试全部用例

测试类1:163邮箱文件名:simulate163# -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdri...
  • u013948010
  • u013948010
  • 2017-11-15 11:45:10
  • 721
收藏助手
不良信息举报
您举报文章:Selenium+Python:excel、xml参数化测试用例
举报原因:
原因补充:

(最多只允许输入30个字)