您的位置:首页 > 编程语言 > Python开发

Python + Selenium自动化测试 -- 第一次框架设计(上)

2018-01-24 11:33 621 查看
自动化测试框架:

1、基本组件:

1)配置文件管理

2)报告和日志文件输出

3)自定义库的封装(如:自定义搜索引擎类)

4)测试脚本文件(测试用例文件)

5)第三方插件

6)持续集成(git,svn,ant,maven,jenkins,我们会把这整合到jenkins,达到持续集成,一键执行测试脚本。)



下面简单介绍一下unittest测试框架:

unittest是一个单元测试框架,是Python编程的单元测试框架。共享测试用例中的初始化和关闭退出代码,最小单元是test,即一个测试用例

1)测试固件

包含“测试代码之前的准备部分”setUp()和“测试结束之后的清扫代码”tearDown()

2)测试用例

以test开头的函数

下面开始项目:

代码参考链接:first_framework_demo

新建项目,创建文件目录如下:



1)配置文件config.ini:

# -*- coding:utf-8 -*-
; 中文注释
[browserType]
;browserName = Firefox
browserName = Chrome
;drowserName = IE

[testServer]
URL = https://www.baidu.com ;URl = www.goole.com


2)logger.py文件:

import logging
import os.path
import time

class Logger(object):

def __init__(self, logger):
'''
指定保存日志的文件路径,日志级别以及调用文件
将日志存入到指定的文件中
:param logger:
'''

# 创建一个logger
self.logger = logging.getLogger(logger)
self.logger.setLevel(logging.DEBUG)

# 创建handler,写入日志文件
rq = time.strftime('%Y%m%d%H%M',time.localtime(time.time()))
log_path = os.path.dirname(os.path.abspath('.')) + '/logs/' + rq + '.log'
fh = logging.FileHandler(log_path)
fh.level = logging.INFO

# 创建handler, 用于输出控制台
ch = logging.StreamHandler()
ch.level = logging.INFO

# 定义handler的输出格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.formatter = formatter
ch.formatter = formatter

self.logger.addHandler(fh)
self.logger.addHandler(ch)

def getlog(self):
return self.logger


3)brower_engine.py文件:

"""
浏览器引擎类
"""
import configparser
import os.path
from selenium import webdriver
from framework.logger import Logger

logger = Logger(logger="BrowserEngine").getlog()

class BrowserEngine(object):

def __init__(self, driver):
self.driver = driver

def open_browser(self):

config = configparser.ConfigParser()
file_path = os.path.dirname(os.path.abspath('.')) + '\config\config.ini'
print(file_path)
# 但是对于有BOM(如Windows下用记事本指定为utf-8)的文件,需要使用 utf-8-sig, 使用utf-8没办法。
# 【我没试过,http://blog.csdn.net/liujingqiu/article/details/77677256】
# 对于我写的代码 此处是utf-8-sig 或者 utf-8 都可以
config.read(file_path,encoding="utf-8")

browser = config.get("browserType", "browserName")
logger.info("You had select %s browser." % browser)
url = config.get("testServer", "URL")
logger.info("The test server url is: %s" % url)

if browser == "Firefox":
self.driver = webdriver.Firefox()
logger.info("firefox.")
elif browser == "Chrome":
self.driver = webdriver.Chrome()
logger.info("Chrome.")
elif browser == "IE":
self.driver = webdriver.Ie()
logger.info("Ie.")

self.driver.get(url)
logger.info("Open url: %s" % url)
self.driver.maximize_window()
logger.info("Maximize the current window.")
self.driver.implicitly_wait(10)
logger.info("Set implicitly wait 10 seconds.")
# self.driver = driver
return self.driver

def quit_browser(self):
self.driver.quit()
logger.info("Now, Close and quit the browser.")


4) baidu_homepage.py暂时为空

5)testsuits/baidu_search.py

"""
测试脚本
"""
import time
import unittest
from framework.brower_engine import BrowserEngine

"""
unittest
一个单元测试框架
共享测试用例中的初始化和关闭退出代码
最小单元是test,即一个测试用例
1)测试固件
包含“测试代码之前的准备部分”setUp()和“测试结束之后的清扫代码”tearDown()
2)测试用例
以test开头的函数
"""

class BaiduSearch(unittest.TestCase):

def setUp(self):
"""
前提准备工作
:return:
"""
self.engine = BrowserEngine.__new__(BrowserEngine)
self.driver = self.engine.open_browser()

def tearDown(self):
"""
测试结束后的操作
:return:
"""
self.engine.quit_browser()
# self.driver.quit()

def test_baidu_search(self):
self.driver.find_element_by_id('kw').send_keys("胡歌")
time.sleep(1)
try:
assert '胡歌' in self.driver.title
print('测试通过.')
except Exception as e:
print('测试失败.', format(e))

a1c4
if __name__ == '__main__':
unittest.main()


运行测试脚本baidu_search.py,会在根目录下的logs文件生成日志文件.

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息