【.com快译】如今,在不牺牲产品质量的情况下频繁部署大型软件的新版本已成为主流趋势。通常,每次引入新功能并触发新部署时,各种错误修复都需要进行深入的、端到端的测试,以确保部署的成功率。虽然对于小的产品或者项目,我们可以通过人工测试来保证覆盖;但是对于那些功能比较多的产品或者应用,我们肯定需要通过自动化测试在最短的时间内提供最大的测试覆盖率。这时候,我们往往需要结合一种编程语言来使用Selenium来达到这个目的。在这篇文章中,我将和大家一起探讨如何使用Selenium和Python搭建一个自动化的web测试框架。SeleniumWebDriver架构速览通常,SeleniumWeb自动化测试框架可以与不同的编程语言结合使用,例如:Java、Python、JavaScript、Ruby、C#等。其中,根据GitHub调查(https://pypl.github.io/PYPL.html),Python是开发人员最常用的编程语言。它具有平滑的学习曲线、简单的语法和干净的代码。因此,Selenium可以轻松地与Python集成,以自动化Web测试过程。作为一个网络框架,SeleniumWebDriver可以在各种支持的浏览器(如:Chrome、Firefox、Safari等)上自动化各种基于网络的应用程序。因此,Selenium自动化测试框架使用户能够自定义与Web应用程序的分步交互,并通过添加断言来发现各种错误。SeleniumWebDriver不是一个独立的测试工具,它通过各种组件来满足Web自动化测试的需要。简而言之,SeleniumWebDriver的后端组件包括:SeleniumWebDriverClientLibrary/LanguageBindings:如上所述,由于Selenium可以与任何语言集成,其下载页面提供了Selenium客户端和WebDriver语言绑定。用户可以使用可以与Selenium服务器交互的任何首选语言创建语言脚本。JSONWire协议:作为Selenium的核心,JSONWire协议通过提供与RESTAPI的数据传输媒介来促进客户端代码与浏览器之间的通信。也就是说,它能够在浏览器的二进制文件和客户端库之间建立连接。浏览器驱动:每个浏览器都会通过浏览器驱动实现数据传输。这些驱动程序可以接收来自编写的基于Selenium的脚本的命令,在相应的浏览器上执行它们,并以HTTP响应的形式返回结果。当然,这一切都需要借助JSONWire协议来实现。浏览器:确保每个自动化测试都可以安装在本地或远程机器上,并在受支持的浏览器(如Firefox、Chrome、MicrosoftEdge、Safari等)中执行。四大Python自动化测试框架随着需求的增加,市面上出现了各种流行度不一的Python自动化测试框架。这些框架在管理脚本的执行顺序、存储结果、呈现日志和添加断言方面各司其职。下面,我们将重点介绍四种流行的自动化测试框架:RobotFramework是一个开源的自动化测试框架。RobotFramework主要用于机器人过程自动化(RPA)和验收测试驱动开发(acceptancetest-drivendevelopment,ATDD)等方面。它支持Python2.7.14及更高版本。优点:适用于所有类型的应用程序,包括:Web应用程序、移动应用程序和桌面应用程序。通过采用关键字驱动方法(KDA),它允许开发人员在没有编程经验的情况下创建具有人类可读关键字的测试用例。它支持来自RFv4.0的原生IF/ELSE语法。它提供专门的社区支持和各种资源。缺点:报表定制过程复杂。虽然框架的并行测试范围比较有限,但是可以通过Pabot(机器人框架的并行执行器,https://pabot.org/)来实现。Pytest作为最常用的Python自动化测试框架之一,主要用于单元测试、功能测试和API测试。它支持Python3.5及以上版本。优点:通过提供fixture,可以覆盖所有的参数组合,无需重写代码。支持多种插件,包括:pytest-randomly、pytest-cov、pytest-django和pytest-bdd。支持pytest-html插件。开发人员只需一个命令即可为自动化测试套件生成html类型的报告。支持使用pytest-xdist插件并行执行各种测试用例。缺点:由于pytest有单独编写测试用例的套路,与其他测试框架的兼容性较差。PyUnit作为Python自带的默认测试框架,PyUnit受到了很多开发者的青睐。同时,作为一个单元测试框架,它主要借鉴了流行的Java测试框架——JUnit。优点:由于属于默认的Python包,PyUnit不需要额外安装和设置。可以快速生成XML和unittest-sml-reporting测试报告。缺点:有时会涉及很多样板代码。由于它是基于JUnit的,所以它使用camelCase命名约定而不是Pythonsnake_case命名约定。作为最流行的Python行为驱动开发(BDD)自动化测试框架之一,Behave在功能上与Cucumber框架非常相似。优点:不仅可以全面支持Gherkin语言,还可以用易读的语言编写测试用例,方便非技术团队的参与。它集成了Django和Flask。缺点:它只适用于黑盒测试。它不支持并行测试。使用Selenium和Pytest框架架设Python有了前面的SeleniumWebDriver架构和四大Python测试框架的基础,我们开始在Windows上安装并运行基于Selenium的自动化测试。第1步:下载并安装适用于Windows的Python。当然,如果你的电脑上已经安装了Python,你完全可以跳过这一步。第二步:为了安装和管理Python中的代码包,必须提前在本地主机上使用Python安装PIP(可以从Python官网下载包管理系统)。下载完成后,可以使用以下命令安装:pythonget-pip.py并使用以下命令确认pip是否安装正确:pip–version第三步:为了构建自动化测试套件,我们安装Pytest库Pytest需要执行以下命令:pipinstall-Upytest并使用以下命令确认Pytest是否安装正确:pytest–version第四步:使用PIP的以下命令安装Selenium框架:pipinstall-使用lenium并使用以下命令,确认安装的selenium版本:python-c"importselenium;print(selenium.__version__)"第五步:为了保持浏览器的独立性,我们不需要下载特定的浏览器司机。相反,我们将使用以下命令安装开源库:WebDriver-Manager自动管理不同的浏览器驱动程序:pipinstallwebdriver-manager并使用以下命令确认是否已正确安装Selenium和Webdriver-manager:piplist此时,我们已经满足了使用Python运行基于Selenium的自动化测试的先决条件。下面我们通过编写脚本快速创建以下简单的测试场景:1.直接访问pCloudy首页2.点击登录3.获取页面标题4.断言登录页面的标题这里我们使用的是selenium-pythonpytestframework脚本:importpytestfromseleniumimportwebdriverfromwebdriver_manager.chromeimportChromeDriverManagerimportsysfromselenium.webdriver.chrome.optionsimportOptionsfromselenium.webdriver.common.keysimportKeysfromtimeimportsleepdefpcloudy_sample_test():driver=webdriver.Chrome(ChromeDriverManager().install())http://cloudy.com()driver.get/')driver.maximize_window()driver.find_element(By.XPATH,'//*[text()="Login"]').click()sleep(2)title=""RemoteMobileWeb&ApplicationTestingonRealAndroidDevices-pCloudy""asserttitle==driver.titledriver.close()如上代码所示,我们首先导入那些自动化测试所需要的代码库。要创建函数,我们首先使用WebDriverManager调用Chrome浏览器。WebDriverManager将检查最新版本的WebDriver二进制文件,如果不在目标系统上,则需要额外下载。接下来,我们导出Selenium需要的WebDriver环境变量。启动浏览器后,我们将pCloudy主页的URL传递给浏览器,并将浏览器最大化以获得更好的分辨率。使用XPATH定位器加载pCloudy主页后,我们将通过登录按钮定向到登录页面。最后,我们使用主页的预期检索标题来断言实际标题。如果断言通过,则测试用例标记为通过,否则标记为失败。最后,当完成执行时,程序关闭正在运行的会话。在pCloudy浏览器云上运行Pytest框架的跨浏览器测试pCloudy作为持续测试的云服务,提供了跨浏览器测试的功能(无论是Windows平台还是Mac平台)。其中,BrowserCloud平台允许用户访问那些托管在云端的远程主机,并且可以使用Selenium自动化框架中的RemoteWebDriver。因此,我们可以在云端模拟不同的环境(例如:不同的浏览器、浏览器的多个版本、不同的操作系统),进行各种自动化测试。同时,浏览器云自动化测试平台可以在各种云托管主机上手动测试Web应用。如果您的自动化测试在特定环境中失败,您只需从UI中选择相同的环境,即可在pCloudy中的相同环境中手动运行测试。下面是一个基于Pytest框架的Selenium脚本。它将在pCloudy的BrowserCloud上执行跨浏览器的测试:importpytestfromosimportenvironfromseleniumimportwebdriverfromselenium.common.exceptionsimportWebDriverExceptionfromselenium.webdriver.remote.remote_connectionimportRemoteConnection@pytest.fixture(scope='function')def_caperClouds={browsUserClouds={desired}":"ramit.dhamija@gmail.com","apiKey":"5TfF4UcNRbN3JhucQ","clientName":"ramit.dhamija@gmail.com","email":"ramit.dhamija@gmail.com","os":"Mac","osVersion":"Catalina","browserName":"safari","browserVersions":"14","pCloudy_EnableVideo":"true","pCloudy_EnablePerformanceData":"true","pCloudy_EnableDeviceLogs":“真”}desired_caps.update(browser)selenium_endpoint="https://prod-browsercloud-in.pcloudy.com/seleniumcloud/wd/hub"executor=RemoteConnection(selenium_endpoint,resolve_ip=False)browser=webdriver.Remote(command_executor=executor,desired_capabilities=desired_caps)yieldbrowserssample_login_test.py代码内容为:importpytestimportsys@pytest.mark.usefixtures('driver')classTestLink(selftest_titledriver):"""Verifyclickandtitleofloginpage:return:None"""driver.get('https://www.pcloudy.com/')driver.maximize_window()driver.find_element(By.XPATH,'//*[text()="Login"]').click()sleep(2)title=""RemoteMobileWeb&ApplicationTestingonRealAndroidDevices-pCloudy""asserttitle==driver.titledriver.quit()可以执行pytest测试脚本如下命令:pytest-n=2tests\sample_login_test.py其中,-n用于指定并行测试执行的数量如上代码所示,在我们的第一个脚本中,我们使用了pytestfixtures。它们在每个相应的测试函数之前运行。fixtures中定义的范围-'function'是fixtures的默认值,这意味着fixture将在每个测试会话中执行一次。为了能够在pCloudy浏览器的云端运行测试,我们以“用户名+API密钥”的形式定义了pCloudy认证等功能。此外,在所需的功能中,我们定义了运行所需的各种环境,其中包括Catalina版本的Mac操作系统和Safari-14浏览器。当然,在pCloudy中,用于采集测试视频记录、性能数据和日志的内置功能并不多。为了能够在pCloudySelenium网格上运行测试,我们将Selenium网格的URL定义为selenium_endpoint。连接的节点主机会根据使用的测试环境自动分配。此外,在第一个脚本的末尾,我们生成了一个浏览器,用于存储和更新自动化测试所需的功能。在下一个脚本中,我们使用Selenium脚本断言与之前在pCloudy登录页面上相同的标题。自动化测试将在pCloudyBrowserCloud中模拟Mac-Catalina、Safari-14等环境。pCloudy的输出:要查看测试的当前运行状态,请重定向到pCloudy设备页面并单击Reports->MyActiveSessions。要查看到目前为止执行的所有测试,请直接转到pCloudy设备页面并单击Reports->AllReports。查看特定测试的日志和快照,直接跳转到pCloudy设备页面,点击Reports->AllReports,对需要日志和截图的特定session名称进行相关操作。原标题:SettingupModernWebTestAutomationFrameworkwithSeleniumandPython,作者:RamitDhamija
