pytest demo

pytest是python的一个测试框架

640?wx_fmt=png

在同性交友平台github上有较高的start数

python鄙视链
pytest 鄙视 > unittest  鄙视 > robotframework 鄙视 > 记流水账 鄙视 > “hello world”小白

640?wx_fmt=jpeg

 640?wx_fmt=gif

由于在家里没有什么业务相关的东西可以做,所以将目光移向了我们的老朋友“豆瓣”

首先,实现一个简单的页面访问并查看是否访问正常

创建一个包含3个url的测试数据test_data

TEST_URL = 'https://www.douban.com'
TEST_BOOK_URL = 'https://book.douban.com'
TEST_MOVIE_URL = 'https://movie.douban.com'
test_data = [TEST_URL,TEST_BOOK_URL,TEST_MOVIE_URL]

接下来导入这次的主角们

import pytest
import allure

由于打算使用浏览器进行测试顺便导入一下selenium

from selenium import webdriver

640?wx_fmt=gif

开始测试环境的准备

  1. 使用装饰器@pytest.fixture将被装饰的函数driver可以当作参数传入测试代码中

  2. scope="module"表示这个函数在module(该py文件)层面只会运行一次

  3. 函数主体部分前三句是slenium的基本操作

  4. 使用yield生成器来返回driver的作用是当测试全部执行完之后才会执行后面的关闭浏览器的操作

@pytest.fixture(scope='module')
def driver():
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.implicitly_wait(3)
    yield driver
    driver.close()
  1. 前面两行装饰器的作用可以在报告中看到

  2. @pytest.mark.parametrize将待测试test_data传入,ids是测试点的名称

  3. 函数test_douban_url的参数中传入了上一步定义的url和在fixture中创建的 driver

  4. 使用assert进行断言判断结果的正确性

@allure.feature('豆瓣简单测试')
@allure.story('进入页面')
@pytest.mark.parametrize('url',test_data,
                            ids=['douban','book','movie'])
def test_douban_url(url,driver):
    with allure.step('测试进入:{}'.format(url)):
        driver.get(url)
        if url == TEST_URL:
            assert driver.title == '豆瓣'
        elif url == TEST_BOOK_URL:
            assert driver.title == '豆瓣读书'
        else:
            assert 0 #豆瓣电影故意报错

同理,增加一个搜索图书的测试点,先写一个搜索的函数

@allure.step('搜索:{1}')
def search(driver,message):
    driver.find_element_by_id('inp-query').send_keys(message)
    driver.find_element_by_xpath('//*[@id="db-nav-book"]
        /div[1]/div/div[2]/form/fieldset/div[2]/input').click()
    return driver.title

再用fixture创建一个function级别的函数(每次执行都有环境准备和清理的操作),跳转到豆瓣读书的首页

@pytest.fixture
def book_driver(driver):
    driver.get(TEST_BOOK_URL)
    yield driver
    driver.get(TEST_BOOK_URL)

测试函数:

test_book_data = ['扫地出门','朋友之间','观山海','鱼翅与花椒']

@allure.feature('豆瓣简单测试')
@allure.story('豆瓣读书搜索')
@pytest.mark.parametrize('book',test_book_data)
def test_doubanbook(book,book_driver):
    title_name = search(book_driver,book)
    assert book in title_name

在cmd中输入

 pytest --alluredir ./result/

结果输出:

zhongxindeMacBook-Pro:pytest_0 zhongxin$ pytest --alluredir ./result/
===================================================================================== test session starts ======================================================================================
platform darwin -- Python 3.6.4, pytest-3.3.2, py-1.5.2, pluggy-0.6.0
rootdir: /Users/zhongxin/Desktop/pytest_0, inifile:
plugins: splinter-1.9.1, metadata-1.7.0, html-1.19.0, bdd-2.21.0, allure-adaptor-1.7.10
collected 7 items                                                                                                                                                                              

test_web.py ..F....                                                                                                                                                                      [100%]

=========================================================================================== FAILURES ===========================================================================================
____________________________________________________________________________________ test_douban_url[movie] ____________________________________________________________________________________

url = 'https://movie.douban.com', driver = <selenium.webdriver.chrome.webdriver.WebDriver (session="9c0c45ffaf1bc420a9f8ab3753de121d")>

    @allure.feature('豆瓣简单测试')
    @allure.story('进入页面')
    @pytest.mark.parametrize('url',test_data,ids=['douban','book','movie'])
    def test_douban_url(url,driver):
        with allure.step('测试进入:{}'.format(url)):
            driver.get(url)
            if url == TEST_URL:
                assert driver.title == '豆瓣'
            elif url == TEST_BOOK_URL:
                assert driver.title == '豆瓣读书'
            else:
>               assert 0 #豆瓣电影故意报错
E               assert 0

test_web.py:49: AssertionError
-------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------
remote_connection.py       480 DEBUG    POST http://127.0.0.1:50486/session/9c0c45ffaf1bc420a9f8ab3753de121d/url {"url": "https://movie.douban.com", "sessionId": "9c0c45ffaf1bc420a9f8ab3753de121d"}
remote_connection.py       567 DEBUG    Finished Request
============================================================================= 1 failed, 6 passed in 93.74 seconds ==============================================================================

将结果转换为allure报告,并将其展示到浏览器上

 allure generate ./result/ -o ./report/ --clean
 allure open -h 127.0.0.1 -p 8083 ./report/

640?wx_fmt=png

640?wx_fmt=png

完整代码:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:zhongxin 
#datetime:2018/8/18 下午10:49
import pytest
from selenium import webdriver
import allure

TEST_URL = 'https://www.douban.com'
TEST_BOOK_URL = 'https://book.douban.com'
TEST_MOVIE_URL = 'https://movie.douban.com'
test_data = [TEST_URL,TEST_BOOK_URL,TEST_MOVIE_URL]
test_book_data = ['扫地出门','朋友之间','观山海','鱼翅与花椒']

@pytest.fixture(scope='module')
def driver():
    option = webdriver.ChromeOptions()
    option.add_argument('headless')
    driver = webdriver.Chrome(executable_path='./driver/chromedriver',chrome_options=option)
    # driver = webdriver.Chrome(executable_path='./driver/chromedriver')
    driver.maximize_window()
    driver.implicitly_wait(3)
    yield driver
    driver.close()

@pytest.fixture(name ='book_driver')
def book_driver(driver):
    driver.get(TEST_BOOK_URL)
    yield driver
    driver.get(TEST_BOOK_URL)

@allure.step('搜索:{1}')
def search(driver,message):
    driver.find_element_by_id('inp-query').send_keys(message)
    driver.find_element_by_xpath('//*[@id="db-nav-book"]/div[1]/div/div[2]/form/fieldset/div[2]/input').click()
    return driver.title

@allure.feature('豆瓣简单测试')
@allure.story('进入页面')
@pytest.mark.parametrize('url',test_data,ids=['douban','book','movie'])
def test_douban_url(url,driver):
    with allure.step('测试进入:{}'.format(url)):
        driver.get(url)
        if url == TEST_URL:
            assert driver.title == '豆瓣'
        elif url == TEST_BOOK_URL:
            assert driver.title == '豆瓣读书'
        else:
            assert 0 #豆瓣电影故意报错


@allure.feature('豆瓣简单测试')
@allure.story('豆瓣读书搜索')
@pytest.mark.parametrize('book',test_book_data)
def test_doubanbook(book,book_driver):
    title_name = search(book_driver,book)
    assert book in title_name

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值