基于python语言的selenium自动化测试(2)-测试代码与脚本代码分离

上一篇介绍了如何搭建selenium环境,也给出了一小段代码演示如何使用selenium
博客不会过多的介绍如何使用selenium api 更多地在于如何构建一个自动化测试项目,
代码的分层是很关键一步,本文介绍如何使用pytest+selenium的框架做到测试代码与脚本代码的分离

pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点:

1、简单灵活,容易上手;
2、支持参数化;
3、能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);
4、pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等;
5、测试用例的skip和xfail处理;
6、可以很好的和jenkins集成;

1、pytest安装

pip install -U pytest   

2、pytest运行代码脚本

if __name__ == '__main__':
    pytest.main("-q test_xxx.py")

3、pytest的fixtures

setup_class/teardown_class       在当前测试类的开始与结束执行。

setup/treadown                   在每个测试方法开始与结束执行。

setup_method/teardown_method     在每个测试方法开始与结束执行,与setup/treadown级别相同。

copy一段下午写的代码
test_youdanweb.py:

#coding=utf-8
import pytest
from youdanweb import YoudanWeb
youdan = YoudanWeb()
class Testlogin:
    def setup_class(self):
        youdan.initialize()
    def teardown_class(self):
        youdan.quit()
    def test_loginfail(self):
        assert u'佣金' in youdan.login('15914145610','456789')
    def test_loginpass(self):
        assert u'佣金' in youdan.login('15914145610','123456')
if __name__ == '__main__':
    pytest.main("-q test_youdanweb.py")

youdanweb.py:

#usr/bin/python
#coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import os
import time
class YoudanWeb():
    def initialize(self):
        chromedriver = "C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe"
        os.environ["webdriver.chrome.driver"] = chromedriver
        self.driver = webdriver.Chrome(chromedriver)
        self.driver.maximize_window()
        self.driver.implicitly_wait(10)
        self.base_url ="https://m.youdan.me"
    def youdanSearch(self,keywords):
        driver = self.driver
        driver.get(self.base_url +"/")
        time.sleep(2)
        driver.find_element_by_xpath(".//a[@class='sprite search-ico txt-over']").click()
        input = driver.find_element_by_id('filterValue')
        input.send_keys(keywords)
        time.sleep(2)
        input.send_keys(Keys.ENTER)
        return driver.page_source
    def login(self,user,pwd):
        driver = self.driver
        driver.get(self.base_url +"/")
        driver.find_element_by_xpath(".//a[@class='nav-ico']").click()
        time.sleep(1)
        driver.find_element_by_xpath(".//a[@class='blue-btn']").click()
        time.sleep(2)
        driver.find_element_by_id('mobile').send_keys(user)
        driver.find_element_by_id('password').send_keys(pwd)
        time.sleep(1)
        driver.find_element_by_id("next").click()
        time.sleep(1)
        return driver.page_source
    def quit(self):
        self.driver.quit()
    def save_screenshot(self,name):
        self.driver.save_screenshot('%s.png'%name)

你可能感兴趣的:(selenium)