前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pytest demo

pytest demo

作者头像
zx钟
发布2019-07-17 16:59:11
1.2K0
发布2019-07-17 16:59:11
举报
文章被收录于专栏:测试游记

pytest是python的一个测试框架

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

python鄙视链

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

代码语言:javascript
复制
由于在家里没有什么业务相关的东西可以做,所以将目光移向了我们的老朋友“豆瓣”首先,实现一个简单的页面访问并查看是否访问正常创建一个包含3个url的测试数据test_dataTEST_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
由于打算使用浏览器进行测试顺便导入一下seleniumfrom selenium import webdriver
开始测试环境的准备使用装饰器@pytest.fixture将被装饰的函数driver可以当作参数传入测试代码中scope="module"表示这个函数在module(该py文件)层面只会运行一次函数主体部分前三句是slenium的基本操作使用yield生成器来返回driver的作用是当测试全部执行完之后才会执行后面的关闭浏览器的操作@pytest.fixture(scope='module')
def driver():
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.implicitly_wait(3)
    yield driver
    driver.close()
前面两行装饰器的作用可以在报告中看到@pytest.mark.parametrize将待测试test_data传入,ids是测试点的名称函数test_douban_url的参数中传入了上一步定义的url和在fixture中创建的 driver使用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/

完整代码:#!/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
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试游记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档