python+selenium+unnittest框架,以百度搜索为例,做了一个简单的框架,先看一下整个项目目录结构

我用的是pycharm工具,我觉得这个工具是天使,超好用也超好看!

这些要感谢原作者:https://blog.csdn.net/u011541946/article/details/70269965

但是我这里有些改动,主要是代码方面的,作者写的我运行有问题而且理解不了,改了一点

有几点注意强调一下:

1、不要建目录,要建python package会自动创建__init__.py,这样import的时候找得到package

2、函数还是选择无参会好一些,如果没有特别的需要

3、有很多api方法的使用不是很熟悉,但没关系,用到了搜一下就行了。有百度和google为什么还要自己死抠

4、有报错,请认真看报错信息,一个字都不能漏掉。指望原作者是不顶用的。

这里就列3个核心py

一、logger.py所有日志输出全靠它了!

#_*_coding:utf-8_*_

import logging
import os
import time class Logger(object): def __init__(self,logger):#logger就是给log起的名字 #创建一个logger
self.logger = logging.getLogger(logger)
self.logger.setLevel(logging.INFO) #创建一个hanlder,用于写入日志文件
request_time = time.strftime('%Y%m%d%H%M',time.localtime(time.time())) #生成一个当前日期的日期字符串
log_path = os.path.dirname(os.getcwd())+'/logs/' # os.getcwd()获取当前工作目录,os.path.dirname(os.getcwd())获取当前目录的上一级目录
log_name = log_path+request_time+'.log' #拼成日志名称 =路径+时间戳.log      #创建一个handler,用于生成在磁盘上
fh = logging.FileHandler(log_name) #logging模块自带的三个handler之一。继承自StreamHandler。将日志信息输出到磁盘文件上。
fh.setLevel(logging.INFO) #再创建一个handler,用于输出控制台
sh = logging.StreamHandler()
sh.setLevel(logging.INFO) #定义handler的输出格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter) #给handler设置格式
sh.setFormatter(formatter) #给logger添加handler 换句话说就是给该logger添加不同的handler
self.logger.addHandler(fh)
self.logger.addHandler(sh) def getlog(self):
return self.logger

怎么说呢,也许你看不懂,但没关系,我也是看了至少5遍才看懂。你就当是组件。有个步骤

1、先创建logger设置好日志名称

2、拼好生成的本地log文件,生成的最终是路径+文件名

3、创建logging的handler,你可以不用管这个是什么,就相当于句柄吧。控制台输出和文件输出还是不一样的方法

4、定义handler的输出格式

5、把控制台输出和文件输出的2个handler添加进第1步的logger中

二、浏览器引擎基础类本剧的核心browser_engine.py

#浏览器引擎类
import configparser
import os
from selenium import webdriver
from framework.logger import Logger mylogger = Logger(logger='TestMyLog').getlog() class BrowserEngine(object):
dir = os.path.dirname(os.path.abspath('.')) #注意相对路径获取方法
firefox_driver_path = dir+'/tools/geckodriver.exe'
chrome_driver_path = dir + '/tools/chromedriver.exe' def open_browser(self):
#读取配置文件
config = configparser.ConfigParser()
file_path = self.dir+'/config/config.ini'
print('file_path===========',file_path)
config.read(file_path)
#从配置 文件 中获取浏览器名称并打印日志
browser = config.get('browserType','browserName')
print('browser=========',browser)
mylogger.info('you had select %s' % browser)
#从配置文件 中获取要访问的URL并打印日志
url = config.get('testServer','URL')
print('url=============',url)
mylogger.info('you want to visit %s' %url)
if browser == 'Firefox':
self.driver = webdriver.Firefox(executable_path=self.firefox_driver_path)
mylogger.info('Starting firefox browser')
elif browser == 'Chrome':
self.driver = webdriver.Chrome(executable_path=self.chrome_driver_path)
mylogger.info('Starting chrome browser') # URL请求
self.driver.get(url)
mylogger.info('Open url: %s' % url) # 窗口全屏幕
self.driver.maximize_window()
mylogger.info('Maximize the current window')
# 加载等待时间
self.driver.implicitly_wait(5)
mylogger.info('Set implicitly wait 10 seconds') return self.driver def quit_browser(self):
mylogger.info('Now,Close and quit the browser')
self.driver.quit()

这个真的没啥了,玩过'一条道走到黑'(新手一个py走完全程的编程方法 )都看得懂。就是有些原来的东西抽出来当了变量全是旧知识点,

唯一用的新知识点是解析配置文件的库包configparser,就那么简单,读取配置文件。一个get就行了,其实相当于是找key-value

在这一步中,我修改了一些内容,与原作者不同。每个人的编程方法不同,没有好坏,只有对错和有无结果,大家见仁见智了!

三、测试类baidu_search.py

#coding=utf-8
import time
import unittest
from framework.browser_engine import BrowserEngine class BaiduSearch(unittest.TestCase): def setUp(self):
#得到driver
browser = BrowserEngine()
self.driver = browser.open_browser()
print(self.driver) def tearDown(self):
self.driver.quit() def test_baidu_search(self):
self.driver.find_element_by_id('kw').send_keys('selenium')
time.sleep(1)
try:
assert 'selenium' in self.driver.title
print('Test Pass')
except Exception as e:
print('Test Fail.',format(e)) if __name__ == '__main__':
unittest.main()

unnittest是python自带的单元测试包来着。其实相当于java中的junit。意思就是运行不需要再写主函数调用。

这里真没得啥要说的。就是核心类浏览器引擎类的调用。生成driver-启动打开页面-输入-断言

四、结果

控制台:

磁盘日志文件:

python+selenium+unnittest框架的更多相关文章

  1. python+selenium之框架设计

    一.自动化测试框架 1.什么是自动化测试框架 简单来说,自动化测试框架就是由一些标准,协议,规则组成,提供脚本运行的环境.自动化测试框架能够提供很多便利给用户高效完成一些事情,例如,结构清晰开发脚本, ...

  2. 从零开始到设计Python+Selenium自动化测试框架-如何开始

    如何开始学习web ui自动化测试?如何选择一门脚本语言?选择什么自动化测试工具? 本人已经做测试快5年,很惭愧,感觉积累不够,很多测试都不会,三年多功能测试,最近两年才开始接触和学习自动化测试.打算 ...

  3. 《一头扎进》系列之Python+Selenium自动化测试框架实战篇6 - 价值好几K的框架,呦!这个框架还真牛叉哦!!!

    1. 简介 本文开始介绍如何通过unittest来管理和执行测试用例,这一篇主要是介绍unittest下addTest()方法来加载测试用例到测试套件中去.用addTest()方法来加载我们测试用例到 ...

  4. python selenium --unittest 框架

    转自:http://www.cnblogs.com/fnng/p/3300788.html 学习unittest 很好的一个切入点就是从selenium IDE 录制导出脚本.相信不少新手学习sele ...

  5. Python selenium自动化测试框架入门实战--登录测试案例

    本文为Python自动化测试框架基础入门篇,主要帮助会写基本selenium测试代码又没有规划的同仁.本文应用到POM模型.selenium.unittest框架.configparser配置文件.s ...

  6. python+selenium 自动化测试框架-学习记录

     本人小白一枚,想着把学习时的东西以博客的方式记录下来,文章中有不正确的地方请大佬多多指点!!共同学习 前期准备 安装python3.selenium.下载对应版本的webdriver:安装所需的第三 ...

  7. Eclipse+Python+Selenium自动化测试框架搭建

    1.下载Eclipse:http://www.eclipse.org/downloads/ 2.下载JDK:http://www.oracle.com/technetwork/java/javaee/ ...

  8. python + selenium 自动化测试框架

    分享一个网站自动化测试框架 结构如下: test_project|--logs|---pages |---register_page.py|      |---base_page.py|---test ...

  9. Python+Selenium+Unittest框架使用——Selenium——定位元素(二)

    1.定位元素(id.name.class.link.partial link) (1)find_element_by_id() 用百度定位测试,用firebug查看定位元素 ,输入框的id为“kw”, ...

随机推荐

  1. MySQL数据命令

    一.数据库操作 创建数据库 create database db1 charset utf8; 查看数据库 show database; show create database db1; selec ...

  2. Java虚拟机详解----常用JVM配置参数

    本文主要内容: Trace跟踪参数 堆的分配参数 栈的分配参数 零.在IDE的后台打印GC日志: 既然学习JVM,阅读GC日志是处理Java虚拟机内存问题的基础技能,它只是一些人为确定的规则,没有太多 ...

  3. json字符串转换对象的方法

    为了方便读者了解json的使用,读者直接粘贴下面代码看效果即可: var json1 = {'name':'小李','age':'11','sex':'女'}; console.log(json1.n ...

  4. UEditor实现前后端分离时单图上传

    首先,需要下载部署ueditor相关代码,可以参考一篇简单的博客,这里不再赘述: 环境搭建好后,我们先简单使用一下,启动http://web.yucong.com:8080/ueditor/index ...

  5. p4中如何rollback/backout merge/integration

    原文: http://answers.perforce.com/articles/KB_Article/How-To-Rollback-An-Integration 当我们需要将一个branch上的代 ...

  6. 【linux】linux下对java程序生成dump文件,并使用IBM Heap Analyzer进行分析,查找定位内存泄漏的问题代码

    1.首先,java程序启动在linux,怎么生成dump文件? 1>第一步,首先你需要得到java程序的PID,最简单的方法使用如下命令 ps -ef|grep java 或者如果是docker ...

  7. windows Server 2008 R2 开关机取消登录时要按Ctrl+Alt+Delete组合键登录的方法

    1.点桌面任务栏的“开始-->运行”在弹出的窗口中输入gpedit.msc . 2.找到如下图所示的位置 右键属性进行设置如下

  8. 用 Prettier 统一团队的代码风格~

    使用 prettier 自動調整 JavaScript 樣式 GFM 格式说明 为什么你不能缺少Linter(以及代码美化工具) 使用 prettier 自動調整 JavaScript 樣式 Reac ...

  9. 【T06】记住TCP是一种流协议

    1.TCP是一种流协议(stream protocol),这意味着数据是以字节流的形式发给接收者的,没有固定的报文和报文边界的概念. 接收端读取tcp数据,无法预知在这一次读操作中会返回多少个字节. ...

  10. How to make an IntelliJ IDEA plugin in less than 30 minutes

    Sometimes it is a nice thing to extend an editor to have it do some new stuff, like being able to re ...