Python+Selenium+Unittest框架

发表于:2018-4-18 11:40

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:sincoolvip    来源:博客园

  python+selenium+unittest框架,以百度搜索为例,做了一个简单的框架,先看一下整个项目目录结构
  我用的是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<br><br>     #创建一个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-启动打开页面-输入-断言
  四、结果
  控制台:
  磁盘日志文件:
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • 说你的好
    2018-4-25 11:20:38

    哈哈,希望能后期更新,更详细的博客,学习学习

  • grace元芳
    2018-4-18 16:07:35

    看出来你还是新手

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号