当前位置: 首页 > news >正文

企业网站的常见服务/附近成人电脑培训班

企业网站的常见服务,附近成人电脑培训班,模版网站商城,wordpress会员下载功能http://blog.csdn.net/huilan_same/article/details/76572428 怎样从0开始搭建一个测试框架_1 这一步我们用到了selenium的基本的知识,以及一些unittest和PyYaml库的内容,有问题的同学可以参考我之前的博客: Python Selenium自动化测试详解 …

http://blog.csdn.net/huilan_same/article/details/76572428

怎样从0开始搭建一个测试框架_1

这一步我们用到了selenium的基本的知识,以及一些unittest和PyYaml库的内容,有问题的同学可以参考我之前的博客: 
Python Selenium自动化测试详解 
Python必会的单元测试框架 —— unittest 
自动化项目配置或用例文件格式推荐–yaml

我们先创建一个简单的脚本吧,在test文件夹创建test_baidu.py:

import os
import time
from selenium import webdriver
from selenium.webdriver.common.by import ByURL = "http://www.baidu.com"
base_path = os.path.dirname(os.path.abspath(__file__)) + '\..'
driver_path = os.path.abspath(base_path+'\drivers\chromedriver.exe')locator_kw = (By.ID, 'kw')
locator_su = (By.ID, 'su')
locator_result = (By.XPATH, '//div[contains(@class, "result")]/h3/a')driver = webdriver.Chrome(executable_path=driver_path)
driver.get(URL)
driver.find_element(*locator_kw).send_keys('selenium 灰蓝')
driver.find_element(*locator_su).click()
time.sleep(2)
links = driver.find_elements(*locator_result)
for link in links:print(link.text)
driver.quit()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

脚本打开chrome,输入“selenium 灰蓝”,然后把所有结果中的标题打印出来。

如果想要搜索“Python selenium”,是不是要再创建一个脚本?还是把原来的脚本修改一下?

或者我们可以用unittest来改一下,把两次搜索分别写一个测试方法:

import os
import time
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import Byclass TestBaiDu(unittest.TestCase):URL = "http://www.baidu.com"base_path = os.path.dirname(os.path.abspath(__file__)) + '\..'driver_path = os.path.abspath(base_path+'\drivers\chromedriver.exe')locator_kw = (By.ID, 'kw')locator_su = (By.ID, 'su')locator_result = (By.XPATH, '//div[contains(@class, "result")]/h3/a')def setUp(self):self.driver = webdriver.Chrome(executable_path=self.driver_path)self.driver.get(self.URL)def tearDown(self):self.driver.quit()def test_search_0(self):self.driver.find_element(*self.locator_kw).send_keys('selenium 灰蓝')self.driver.find_element(*self.locator_su).click()time.sleep(2)links = self.driver.find_elements(*self.locator_result)for link in links:print(link.text)def test_search_1(self):self.driver.find_element(*self.locator_kw).send_keys('Python selenium')self.driver.find_element(*self.locator_su).click()time.sleep(2)links = self.driver.find_elements(*self.locator_result)for link in links:print(link.text)if __name__ == '__main__':unittest.main()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

现在,我们把配置抽出来放到config.yml中:

URL: http://www.baidu.com
  • 1

为了读取yaml文件,我们需要一个封装YamlReader类,在utils中创建file_reader.py文件:

import yaml
import osclass YamlReader:def __init__(self, yamlf):if os.path.exists(yamlf):self.yamlf = yamlfelse:raise FileNotFoundError('文件不存在!')self._data = None@propertydef data(self):# 如果是第一次调用data,读取yaml文档,否则直接返回之前保存的数据if not self._data:with open(self.yamlf, 'rb') as f:self._data = list(yaml.safe_load_all(f))  # load后是个generator,用list组织成列表return self._data
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

而且我们需要一个Config类来读取配置,config.py:

"""
读取配置。这里配置文件用的yaml,也可用其他如XML,INI等,需在file_reader中添加相应的Reader进行处理。
"""
import os
from utils.file_reader import YamlReader# 通过当前文件的绝对路径,其父级目录一定是框架的base目录,然后确定各层的绝对路径。如果你的结构不同,可自行修改。
# 之前直接拼接的路径,修改了一下,用现在下面这种方法,可以支持linux和windows等不同的平台,也建议大家多用os.path.split()和os.path.join(),不要直接+'\\xxx\\ss'这样
BASE_PATH = os.path.split(os.path.dirname(os.path.abspath(__file__)))[0]
CONFIG_FILE = os.path.join(BASE_PATH, 'config', 'config.yml')
DATA_PATH = os.path.join(BASE_PATH, 'data')
DRIVER_PATH = os.path.join(BASE_PATH, 'drivers')
LOG_PATH = os.path.join(BASE_PATH, 'log')
REPORT_PATH = os.path.join(BASE_PATH, 'report')class Config:def __init__(self, config=CONFIG_FILE):self.config = YamlReader(config).datadef get(self, element, index=0):"""yaml是可以通过'---'分节的。用YamlReader读取返回的是一个list,第一项是默认的节,如果有多个节,可以传入index来获取。这样我们其实可以把框架相关的配置放在默认节,其他的关于项目的配置放在其他节中。可以在框架中实现多个项目的测试。"""return self.config[index].get(element)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

修改test_baidu.py:

import time
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
from utils.config import Config, DRIVER_PATHclass TestBaiDu(unittest.TestCase):URL = Config().get('URL')locator_kw = (By.ID, 'kw')locator_su = (By.ID, 'su')locator_result = (By.XPATH, '//div[contains(@class, "result")]/h3/a')def setUp(self):self.driver = webdriver.Chrome(executable_path=DRIVER_PATH + '\chromedriver.exe')self.driver.get(self.URL)def tearDown(self):self.driver.quit()def test_search_0(self):self.driver.find_element(*self.locator_kw).send_keys('selenium 灰蓝')self.driver.find_element(*self.locator_su).click()time.sleep(2)links = self.driver.find_elements(*self.locator_result)for link in links:print(link.text)def test_search_1(self):self.driver.find_element(*self.locator_kw).send_keys('Python selenium')self.driver.find_element(*self.locator_su).click()time.sleep(2)links = self.driver.find_elements(*self.locator_result)for link in links:print(link.text)if __name__ == '__main__':unittest.main()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

我们已经把配置分离出来了,虽然现在看起来似乎很麻烦,但是想想如果你有50个用例文件甚至更多,一旦项目URL变了,你还要一个个去修改吗?

所有的代码我都放到了GITHUB上传送,可以自己下载去学习,有什么好的建议或者问题,可以留言或者加我的QQ群:455478219讨论。

版权声明:本文为博主原创文章,转载请声明出处并添加原文链接。
  • 本文已收录于以下专栏:
  • Python Selenium自动化测试详解
  • 从零搭建一个自动化测试框架
 

http://www.jmfq.cn/news/5116861.html

相关文章:

  • 营销型网站建设排名/广州seo网站推广平台
  • 预定型网站有哪些/济南疫情最新情况
  • 广东省城乡与住房建设厅网站/推广网站的方法
  • 海南手机网站建设公司哪家好/站内免费推广有哪些
  • 自己做的网站怎么上传到网络/谷歌官网入口
  • 网站后台编辑器内容不显示/外贸seo优化
  • 简洁的网站设计/购买模板建站
  • iis网站属性怎么打开/合肥关键词排名推广
  • web版wordpress/seo搜索引擎优化排名
  • 设计网站建站/关键词挖掘站网
  • 没网站可以做seo吗/网站推广投放
  • 惠阳区建设局网站/上海关键词推广公司
  • 珠海pc网站建设/怎么在百度发布免费广告
  • 营销型网站建设的费用报价单/seo推广 课程
  • 广州专业网站建设报价/seo销售代表招聘
  • 网站制作广告/建立网站费用大概需要多少钱
  • 做网站页面的框架/零基础能做网络推广吗
  • 福田做商城网站建设找哪家公司好/广州seo工程师
  • 家电网站设计方案/网店如何做推广
  • 上海公司网站建设以子/seo推广主要做什么的
  • 图书馆网络规划与设计/黑河seo
  • 百度网站官方认证怎么做/域名申请的流程
  • 珠海响应式网站建设/网站权重查询
  • 网站进入沙盒的表现/长沙网站制作关键词推广
  • 阿里云上能建设自己的企业网站/优化百度涨
  • 毕业设计做课程网站好/免费推广平台哪些比较好
  • 无锡鸿源建设集团有限公司网站/重庆百度关键词推广
  • 政府网站建设赏析/企业网站建设制作
  • 鲲鹏建设集团有限公司网站/郴州网站seo外包
  • 房地产培训网站建设/优化网站性能