本章介绍了如何在Python中使用Web抓取工具执行测试。

介绍

在大型Web项目中,会定期执行网站后端的自动化测试,但经常会跳过前端测试。这背后的主要原因是网站的编程就像各种标记和编程语言的网络一样。我们可以为一种语言编写单元测试,但是如果以另一种语言进行交互则变得很有挑战性。这就是为什么我们必须具有一组测试来确保我们的代码按预期执行的原因。

使用Python测试

当我们谈论测试时,它意味着单元测试。在深入研究Python测试之前,我们必须了解单元测试。以下是单元测试的一些特征-

组件功能的至少一个方面将在每个单元测试中进行测试。

每个单元测试都是独立的,也可以独立运行。

单元测试不会干扰任何其他测试的成功或失败。

单元测试可以任何顺序运行,并且必须至少包含一个断言。

单元测试-Python模块

所有标准Python安装均随附名为Unittest的Python模块,用于单元测试。我们只需要导入它,剩下的就是unittest.TestCase类的任务,它将执行以下操作-

SetUp和tearDown函数由unittest.TestCase类提供。这些功能可以在每次单元测试之前和之后运行。

它还提供了assert语句,以允许测试通过或失败。

它运行以test_开头的所有功能作为单元测试。

在这个例子中,我们将结合使用web scraping和unittest。我们将测试Wikipedia页面以搜索字符串“ Python”。它将基本上进行两个测试,第一个测试标题页是否与搜索字符串相同(即是否为“ Python”),第二个测试确保标题页具有内容div。

首先,我们将导入所需的Python模块。我们使用BeautifulSoup进行网页抓取,当然也使用unittest进行测试。

from urllib.request import urlopen

from bs4 import BeautifulSoup

import unittest

现在我们需要定义一个将扩展unittest.TestCase的类。全局对象bs将在所有测试之间共享。指定单元测试的功能setUpClass将完成此任务。在这里,我们将定义两个功能,一个用于测试标题页,另一个用于测试页面内容。

classTest(unittest.TestCase):bs=NonedefsetUpClass():url='https://en.wikipedia.org/wiki/Python'Test.bs=BeautifulSoup(urlopen(url),'html.parser')deftest_titleText(self):pageTitle=Test.bs.find('h1').get_text()self.assertEqual('Python',pageTitle);deftest_contentExists(self):content=Test.bs.find('div',{'id':'mw-content-text'})self.assertIsNotNone(content)if__name__=='__main__':unittest.main()

运行上面的脚本后,我们将获得以下输出-

----------------------------------------------------------------------

Ran 2 tests in 2.773s

OK

An exception has occurred, use %tb to see the full traceback.

SystemExit: False

D:\ProgramData\lib\site-packages\IPython\core\interactiveshell.py:2870:

UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.

warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)

用硒测试

让我们讨论如何使用Python Selenium进行测试。这也称为硒测试。Pythonunittest和Selenium并没有太多共同点。我们知道Selenium会向不同的浏览器发送标准的Python命令,尽管它们的浏览器设计有所不同。回想一下,我们在先前的章节中已经安装并使用了Selenium。在这里,我们将在Selenium中创建测试脚本并将其用于自动化。

借助下一个Python脚本,我们正在创建用于Facebook登录页面自动化的测试脚本。您可以修改该示例以自动执行您选择的其他表单和登录,但是概念是相同的。

首先用于连接到Web浏览器,我们将从selenium模块导入webdriver-

from selenium import webdriver

现在,我们需要从硒模块导入密钥。

from selenium.webdriver.common.keys import Keys

接下来,我们需要提供用户名和密码以登录我们的Facebook帐户

user = "gauravleekha@gmail.com"

pwd = ""

接下来,提供用于Chrome的网络驱动程序的路径。

path = r'C:\\Users\\gaurav\\Desktop\\Chromedriver'

driver = webdriver.Chrome(executable_path=path)

driver.get("http://www.facebook.com")

现在,我们将使用assert关键字验证条件。

assert "Facebook" in driver.title

在以下代码行的帮助下,我们正在将值发送到电子邮件部分。在这里,我们通过ID对其进行搜索,但可以通过按driver.find_element_by_name(“ email”)的名称进行搜索。

element = driver.find_element_by_id("email")

element.send_keys(user)

在下面的代码行的帮助下,我们将值发送到密码部分。在这里,我们通过ID对其进行搜索,但可以通过按driver.find_element_by_name(“ pass”)的名称进行搜索。

element = driver.find_element_by_id("pass")

element.send_keys(pwd)

在电子邮件和密码字段中插入值之后,下一行代码用于按Enter /登录。

element.send_keys(Keys.RETURN)

现在,我们将关闭浏览器。

driver.close()

运行上述脚本后,将打开Chrome网络浏览器,您会看到正在插入电子邮件和密码,然后单击登录按钮。

比较:单元测试或硒

很难比较unittest和硒,因为如果您要使用大型测试套件,则需要unites的语法严格性。另一方面,如果您要测试网站的灵活性,那么硒测试将是我们的首选。但是,如果我们可以将两者结合在一起,该怎么办?我们可以将硒导入Python单元测试中,并充分利用两者。Selenium可用于获取有关网站的信息,而unittest可以评估该信息是否符合通过测试的标准。

例如,我们通过结合以下两种方法来重写上述Python脚本,以实现Facebook登录的自动化-

importunittestfromseleniumimportwebdriverclassInputFormsCheck(unittest.TestCase):defsetUp(self):self.driver=webdriver.Chrome(r'C:\Users\gaurav\Desktop\chromedriver')deftest_singleInputField(self):user="gauravleekha@gmail.com"pwd=""pageUrl="http://www.facebook.com"driver=self.driver

driver.maximize_window()driver.get(pageUrl)assert"Facebook"indriver.title

elem=driver.find_element_by_id("email")elem.send_keys(user)elem=driver.find_element_by_id("pass")elem.send_keys(pwd)elem.send_keys(Keys.RETURN)deftearDown(self):self.driver.close()if__name__=="__main__":unittest.main()

上一页 打印页面

python爬虫如何运行在web_Python Web爬网-使用爬虫进行测试相关推荐

  1. vs azure web_在Azure中迁移和自动化Chrome Web爬网程序的指南。

    vs azure web Webscraping as a required skill for many data-science related jobs is becoming increasi ...

  2. python web应用_为您的应用选择最佳的Python Web爬网库

    python web应用 Living in today's world, we are surrounded by different data all around us. The ability ...

  3. python爬虫入门实战---------一周天气预报爬取_Python爬虫入门实战--------一周天气预报爬取【转载】【没有分析...

    Python爬虫入门实战--------一周天气预报爬取[转载][没有分析 Python爬虫入门实战--------一周天气预报爬取[转载][没有分析] 来源:https://blog.csdn.ne ...

  4. Python爬虫-2019年我破解了商标网数据爬虫-破解反爬技术那些事情

    Python爬虫-2019年我破解了商标网!数据爬虫-破解反爬技术那些事情 由于自己一直做Python大数据挖掘技术开发,最近有不少的朋友要做大数据分析,找我帮忙商标网的数据挖掘,实现爬取中国商标网全 ...

  5. python调用woff_GitHub - zergtant/python-maoyan-spider: woff-xml解码 “猫眼网反爬虫机制” 的爬虫。...

    猫眼网反爬虫策略的处理 2018/12/7测试有效 注意:爬取频繁之后,会根据mac与ip地址封禁,修改为局域网其他ip后,大概5-6次修改,就会封网关 [目录] 一.引入问题 可以看到,猫眼网电影评 ...

  6. 构建您的第一个Web爬网程序,第2部分

    在本教程中,您将学习如何使用Mechanize单击链接,填写表单和上传文件. 您还将学习如何切片机械化页面对象,以及如何自动执行Google搜索并保存其结果. 主题 单页与分页 机械化 代理商 页 N ...

  7. 【爬虫实战】国家企业公示网-crawler爬虫抓取数据

    crawler爬虫实现 1. crawler功能 2. crawler代码实现 3. 完成后的项目文件结构 4. 后续可以继续完善 学习目标 了解 crawler爬虫运行流程 了解 crawler爬虫 ...

  8. python爬虫网易云音乐最热评论并分析_python爬虫入门 实战(三)---爬网易云音乐热门评论...

    网易云音乐 本篇涉及知识: 1.request第三方库的基本使用 2.json解析 本篇目标: 爬取指定一个歌单的所有歌曲的热门评论 (注:本篇爬取不直接解析html文本,而是直接分析获取评论的api ...

  9. 使用BeautifulSoup的Python Web爬网教程

    When performing data science tasks, it's common to want to use data found on the internet. You'll us ...

最新文章

  1. [LeetCode]题解(python):150-Evaluate Reverse Polish Notation
  2. 不同浏览器Cookie有效期问题
  3. 最长连续子序列偏移_最长连续不重复子序列
  4. @ReponseBody返回json格式的数据
  5. Nagios监控之8:利用mutt+msmtp实现邮件报警
  6. win7php网页显示空白,win7系统ie11打开网页显示空白的解决方法
  7. 情爱难剪断,菩提树下悟佛缘
  8. 阿里飞猪曝杀熟;贾跃亭“没有抛弃”恒大;百度起诉搜狗浏览器劫持流量 | 极客头条...
  9. HFSS19 官方中文教程系列 L06
  10. mapxtreme for java_MapXtreme For Java 4.8.2 超菜入门
  11. 载入java VM 时Windows 出现错误:2
  12. 单片机入门 - 模电、数电与单片机
  13. VMware Fusion Player 个人免费版
  14. php一元二次方程求根,JavaScript_在线一元二次方程计算器实例(方程计算器在线计算),复制代码 代码如下:htmll - phpStudy...
  15. CSFR(跨站请求伪造)攻击与防御
  16. 8-25 26 veriloga语言
  17. MAC如何查看图片尺寸大小
  18. 超实用后台UI模板有这些就够了!(三)
  19. 如何将图片压缩到100K以内,教你几种免费方法
  20. 三个最好的免费短信发送服务

热门文章

  1. C语言课程设计选哪个,C语言课程设计选题及要求.docx
  2. linux sqlplus 密码有$
  3. codevs 1147 排座椅
  4. [转]Cookie/Session机制详解
  5. 经典博文--各系列文章
  6. 代码生成工具的分类及比较
  7. 量子力学 一 基础2 作用量、普朗克常量与物质波
  8. UA MATH566 一个例子:什么是隐状态
  9. UA MATH566 统计理论 QE练习题2.1
  10. C#简单操作MongoDB