一、项目结构

--driverAction

----Assessement.py

----basicPageAction.py

----BrowserDriver.py

--drivers

----chromedriver.md

--features

----BaiduFanyi.feature

--libraries

----allure-commandline

--pages

----BaiduFayi_page.py

----Indexpage.py

--steps

----Test_BaiduFanyi_steps.py

--utilities

----PathUtility.py

--.gitignore

--main.py

--pytest.ini

--requirements.txt

二、下载内容

2.1 WebDriver

  chromedriver: http://chromedriver.storage.googleapis.com/index.html

  iedriver:http://selenium-release.storage.googleapis.com/index.html

2.2 allure-commandline

  allure 命令行工具,下载地址:https://github.com/allure-framework/allure2/releases

三、代码介绍

3.1 PathUtility.py

处理一些必要的文件路径事件

# @Software PyCharm
# @Time 2021/11/13 9:53 下午
# @Author Helen
# @Desc handle all folder path things
import os
import shutil BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
BROWSER_CHROME = os.path.join(BASEDIR, 'drivers/chromedriver')
REPORTPATH = os.path.join(BASEDIR, 'report')
ALLURECOMMANDLINEPATH_LINUX = os.path.join(BASEDIR, 'libraries/allure-commandline/dist/bin/allure')
ALLURECOMMANDLINEPATH_WINDOWS = os.path.join(BASEDIR, 'libraries/allure-commandline/dist/bin/allure.bat')
REPORT_XMLPATH = os.path.join(REPORTPATH, 'xml') def create_folder(path):
if not os.path.exists(path):
os.mkdir(path) def delete_folder_and_sub_files(path):
if os.path.exists(path):
shutil.rmtree(path)

3.2 BrowserDriver.py

  浏览器驱动处理.

# @Software PyCharm
# @Time 2021/11/13 9:39 下午
# @Author Helen
# @Desc the very start: setup browser for testing
# @note have a knowledge need to get from https://www.jb51.net/article/184205.htm import pytest
from selenium import webdriver
from selenium.webdriver import Chrome
from utilities.PathUtility import BROWSER_CHROME
from driverAction.basicPageAction import basicPageAction @pytest.fixture(scope='module')
def browserDriver():
driver_file_path = BROWSER_CHROME
options = webdriver.ChromeOptions()
driver = Chrome(options=options, executable_path=driver_file_path) driver.maximize_window()
driver.get('https://fanyi.baidu.com/?aldtype=16047#en/zh/') # entrance URL action_object = basicPageAction(driver) yield action_object
driver.close()
driver.quit()

3.3 BasicPageAction.py

  处理页面操作的公共方法:不全,可以根据项目添加其他内容。

# @Software PyCharm
# @Time 2021/11/13 10:04 下午
# @Author Helen
# @Desc common page action collection, aim to make sure element have show up before next action
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait class basicPageAction:
def __init__(self, driver):
self.driver = driver
self.timeout = 15
self.driver.set_script_timeout(10) def try_click_element(self, loc):
element = self.get_element_until_visibility(loc)
if element is not None:
element.click()
else:
return False def try_get_element_text(self, loc):
element = self.get_element_until_visibility(loc)
if element is not None:
return element.text
else:
return False def try_send_keys(self, loc, text):
element = self.get_element_until_visibility(loc)
if element is not None:
element.clear()
element.send_keys(text) def get_element_until_visibility(self, loc):
try:
return WebDriverWait(self.driver, self.timeout).until(EC.visibility_of_element_located(loc))
except TimeoutException as e:
return None def try_get_screenshot_as_png(self):
return self.driver.get_screenshot_as_png()

3.4 Asscessment.py

  处理断点的公共类:不全,可以根据项目自行添加其他内容。

# @Software PyCharm
# @Time 2021/11/13 11:16 下午
# @Author Helen
# @Desc handle assertion and save screenshot in allure report import allure
from allure_commons.types import AttachmentType class Assessment: @staticmethod
def assert_text_with_screenshot(expect_value, actual_value, page):
allure.attach(page.get_page_screenshot_as_png(), name='Screenshot', attachment_type=AttachmentType.PNG)
assert expect_value == actual_value

3.5 BaiduFanyi.feature

  正式进到测试主题,编写用例行为,即测试用例。

@debug
Feature: Baidu_translation Scenario: check English translate to Chinese
Given I switch original language as English
When I input python
Then the translate result should be Python

3.6  Test_BaiduFanyi_steps.py

  为3.5所设计的用户行为编写实现方法。

  (如代码所示:有个问题我不懂的,希望有大佬帮我解答)

# @Software PyCharm
# @Time 2021/11/13 11:08 下午
# @Author Helen
# @Desc there have an issue I haven't figure out : if I not import browserDriver, there will can't find it when running import allure
from pytest_bdd import scenarios, given, when, then, parsers
from pages.BaiduFanyi_page import BaiduFanyi_page
from driverAction.Assessment import Assessment
from driverAction.BrowserDriver import browserDriver scenarios("../features/BaiduFanyi.feature") @given(parsers.parse('I switch original language as English'))
@allure.step('I switch original language as English')
def translation_setup():
True @when(parsers.parse('I input python'))
@allure.step('I input python')
def original_input(browserDriver):
baiduFanyi_page = BaiduFanyi_page(browserDriver)
baiduFanyi_page.send_keys_for_baidu_translate_input('python') @then(parsers.parse('the translate result should be Python'))
@allure.step('the translate result should be Python')
def check_result(browserDriver):
baiduFanyi_page = BaiduFanyi_page(browserDriver)
Assessment.assert_text_with_screenshot('python', baiduFanyi_page.get_text_from_target_output(), baiduFanyi_page)

3.7 Main.py

  执行测试的主要入口。

# @Software PyCharm
# @Time 2021/11/13 11:25 下午
# @Author Helen
# @Desc import pytest, platform, os
from utilities.PathUtility import create_folder, delete_folder_and_sub_files, REPORTPATH, REPORT_XMLPATH, \
ALLURECOMMANDLINEPATH_WINDOWS, ALLURECOMMANDLINEPATH_LINUX if __name__ == "__main__":
create_folder(REPORTPATH)
delete_folder_and_sub_files(REPORT_XMLPATH)
create_folder(REPORT_XMLPATH) # run test cases by path
pytest.main(['-s', '-v', 'steps/Test_BaiduFanyi_steps.py', '--alluredir', r'report/xml'])
# run test cases by tags
# pytest.main(['-m', 'debug', '-s', '-v', 'steps/', '--alluredir', r'report/xml']) if platform.system() == 'Windows':
command = "{} generate report/xml -o report/allure_report --clean".format(ALLURECOMMANDLINEPATH_WINDOWS)
else:
command = "{} generate report/xml -o report/allure_report --clean".format(ALLURECOMMANDLINEPATH_LINUX) os.system(command=command)

3.8 python.ini

  目前主要用来设置标签。有兴趣可以读一下https://blog.csdn.net/weixin_48500307/article/details/108431634

[pytest]
markers =
debug

四、执行测试

4.1 run main.py

  

4.2 在report文件夹中查看测试报告。

  

4.3 报告详情

pytest_BDD + allure 自动化测试框架的更多相关文章

  1. 【转】自动化测试框架: pytest&allure ,提高自动化健壮性和稳定性

    序 在之前,我写过一个系列“从零开始搭建一个简单的ui自动化测试框架(pytest+selenium+allure)”,在这个系列里,主要介绍了如何从零开始去搭建一个可用的自动化工程框架,但是还缺乏了 ...

  2. Maven+TestNG+ReportNG/Allure接口自动化测试框架初探(上)

    转载:http://www.51testing.com/html/58/n-3721258.html 由于一直忙于功能和性能测试,接口自动化测试框架改造的工作被耽搁了好久.近期闲暇一些,可以来做点有意 ...

  3. Android 手机端自动化测试框架

    前言: 大概有4个月没有更新了,因项目和工作原因,忙的手忙脚乱,趁十一假期好好休息一下,年龄大了身体还是扛不住啊,哈哈.这次更新Android端自动化测试框架,也想开源到github,这样有人使用才能 ...

  4. Appium+python自动化(四十二)-Appium自动化测试框架综合实践- 寿终正寝完结篇(超详解)

    1.简介 按照上一篇的计划,今天给小伙伴们分享执行测试用例,生成测试报告,以及自动化平台.今天这篇分享讲解完.Appium自动化测试框架就要告一段落了. 2.执行测试用例&报告生成 测试报告, ...

  5. 广深小龙-基于unittest、pytest自动化测试框架之demo来学习啦!!!

    基于unittest.pytest自动化测试框架之demo,赶紧用起来,一起学习吧! demo分为两个框架:①pytest    ②unittest demo 中 包含 web.api 自动化测试框架 ...

  6. 【接口自动化】Python+Requests接口自动化测试框架搭建【三】

    经过上两篇文章的讲解,我们已经完成接口自动化的基础框架,现在开始根据实际项目丰满起来. 在PyCharm中新建项目,项目工程结构如下: config:配置文件夹,可以将一些全局变量放于配置文件中,方便 ...

  7. ApiTesting全链路自动化测试框架 - 初版发布(一)

    简介 此框架是基于Python+Pytest+Requests+Allure+Yaml+Json实现全链路接口自动化测试. 主要流程:解析接口数据包 ->生成接口基础配置(yml) ->生 ...

  8. ApiTesting全链路接口自动化测试框架 - 新增数据库校验(二)

    在这之前我完成了对于接口上的自动化测试:ApiTesting全链路接口自动化测试框架 - 初版(一) 但是对于很多公司而言,数据库的数据校验也尤为重要,另外也有小伙伴给我反馈希望支持. 所以最近几天我 ...

  9. 【自动化测试框架】pytest和unitttest你知道多少?区别在哪?该用哪个?

    一.大家熟知的自动化测试框架 Java JUnit.TestNG等等. python PyUnit(unittest).Pytest.Robot Framework等等 二.Pytest介绍 pyte ...

随机推荐

  1. 关于 RocketMQ 事务消息的正确打开方式 → 你学废了吗

    开心一刻 昨晚和一哥们一起吃夜宵,点了几瓶啤酒 不一会天空下起了小雨,哥们突然道:糟了 我:怎么了 哥们:外面下雨了,我老婆还在等着我去接她 他给了自己一巴掌,说道:真他妈不是个东西 我心想:哥们真是 ...

  2. 大爽Python入门教程 3-5 习题

    大爽Python入门公开课教案 点击查看教程总目录 1 求平方和 使用循环,计算列表所有项的平方和,并输出这个和. 列表示例 lst = [8, 5, 7, 12, 19, 21, 10, 3, 2, ...

  3. 手把手教你学Dapr - 7. Actors

    上一篇:手把手教你学Dapr - 6. 发布订阅 介绍 Actor模式将Actor描述为最低级别的"计算单元".换句话说,您在一个独立的单元(称为actor)中编写代码,该单元接收 ...

  4. 解决一个无聊的问题,如何处理Java用户在dos被收集信息时拷贝带换行符的文本信息造成的while的多次循环(java解决Scanner.next在接收用户输入时出现多个换行的形况)[解决方案一]

    问题描述: 用户在dos窗口输入的时候(web项目不会出现这样的问题,所以这个问题日常碰不到),摁下回车时,Scanner对象的next()扫描用户输入的文本,后面就可以根据输入的字符串进行判断,并执 ...

  5. 【从头到脚品读 Linux 0.11 源码】第一回 最开始的两行代码

    从这一篇开始,您就将跟着我一起进入这操作系统的梦幻之旅! 别担心,每一章的内容会非常的少,而且你也不要抱着很大的负担去学习,只需要像读小说一样,跟着我一章一章读下去就好. 话不多说,直奔主题.当你按下 ...

  6. [bzoj1042]硬币购物

    先预处理出没有上限的方案数,然后容斥,然后将所有东西的范围都变为[0,+oo),即可用预处理出的dp数组计算 1 #include<bits/stdc++.h> 2 using names ...

  7. Study Blazor .NET(二)安装

    翻译自:Study Blazor .NET,转载请注明. 安装 请根据下面步骤安装开始使用Blazor: 1.针对不同的操作系统,安装最新版.Net Core框架 [这里] 2.用.Net Core ...

  8. Python系列教程-详细版 | 图文+代码,快速搞定Python编程(附全套速查表)

    作者:韩信子@ShowMeAI 教程地址:http://showmeai.tech/article-detail/python-tutorial 声明:版权所有,转载请联系平台与作者并注明出处 引言 ...

  9. spring boot 动态生成接口实现类

    目录 一: 定义注解 二: 建立动态代理类 三: 注入spring容器 四: 编写拦截器 五: 新建测试类 在某些业务场景中,我们只需要业务代码中定义相应的接口或者相应的注解,并不需要实现对应的逻辑. ...

  10. vue项目中使用 SheetJS / js-xlsx 导出文件

    1.  npm install xlsx 2. 在App.vue 中引入xlsx import * as XLSX from 'xlsx'; // 数据导出导入所需要的依赖  3.  使用xlsx 3 ...