Plugin for running pyppeteer in pytest.
Project description
pytest-pyppeteer
Plugin for running pyppeteer in pytest
Quick Start
Installation
Requirements
pytest-pyppeteer work with Python >=3.6.
Install pytest-pyppeteer
pip install pytest-pyppeteer
Usage
For example, compare the scores of a book and its movie on Douban.
New pyppeteer test project
Create a new pyppeteer test project in the specified path.
pytest --nptp=douban
The directory structure:
├── desc
├── pyproject.toml
└── test_douban.py
1 directory, 2 files
Configuration
desc
Create two files douban_movie.desc
and douban_book.desc
in desc
directory.
[HomePage]
is required.
# douban_movie.desc
[HomePage]
#CSS
search_input = '#inp-query'
search_apply = '.inp-btn > input:nth-child(1)'
[SearchResultsPage]
# {} indicates that this part can be replaced by the custom parameter
result = '#root > div > div > div > div > div:nth-child({}) > div.item-root a.cover-link'
[DetailPage]
rating = '#interest_sectl > div.rating_wrap.clearbox > div.rating_self.clearfix > strong'
# douban_book.desc
[HomePage]
#CSS
search_input = '#inp-query'
search_apply = '.inp-btn > input:nth-child(1)'
[SearchResultsPage]
# {} indicates that this part can be replaced by the custom parameter
result = '#root > div > div > div > div > div:nth-child({}) > div.item-root a.cover-link'
[DetailPage]
rating = '#interest_sectl > div > div.rating_self.clearfix > strong'
pyproject.toml
Add target
:
[tool.pytest.pyppeteer.targets]
[tool.pytest.pyppeteer.targets.target1]
name = "douban_movie"
base_url = "https://movie.douban.com/"
[tool.pytest.pyppeteer.targets.target2]
name = "douban_book"
base_url = "https://book.douban.com/"
Path executablePath
to a Chromium or Chrome executable.
[tool.pytest.pyppeteer.options]
executablePath = "/Applications/Chrome.app/Contents/MacOS/Google Chrome"
Write tests
# test_douban.py
import asyncio
from functools import partial
import pytest
from pytest_pyppeteer.models import Pyppeteer
async def query_rating(target: Pyppeteer, movie_or_book_name: str):
await target.open(goto_base_url=True)
await target.input("search_input", text=movie_or_book_name)
await target.click("search_apply")
# Into search results page
target.switch_page("SearchResultsPage")
# Click the first result
await target.click("result", custom_parameter=(1,))
# Into detail page
target.switch_page("DetailPage")
rating: str = await target.get_value("rating")
await target.close()
return rating
@pytest.mark.parametrize("target", [("target1", "target2")], indirect=True)
async def test_shawshank_rating(target):
shawshank_rating = partial(query_rating, movie_or_book_name="肖申克的救赎")
movie_rating, book_rating = await asyncio.gather(*map(shawshank_rating, target))
assert movie_rating == book_rating
Execute tests
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
pytest-pyppeteer-0.1.0.tar.gz
(11.0 kB
view hashes)
Built Distribution
Close
Hashes for pytest_pyppeteer-0.1.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5cade8c918563fd985f566910390dda4b15cac3d4836040ac0428382d0707fd7 |
|
MD5 | 68baa1d001412283f7ff7d02be6217b8 |
|
BLAKE2b-256 | 41437d252ffb635d778b9302e4d61f4301da753e5d29d2f41dc515148e675b64 |