功能测试使用selenium,模块有:

1、futil: 公共方法,如元素高亮显示

# coding=utf-8
"""高亮显示元素"""
def highLight(driver,element):
js = '''
element = arguments[0];
element.setAttribute('style','border: 3px solid red;')
'''
driver.execute_script(js,element)

2、models: 页面控件和页面操作方法封装

页面基类BasePage.py

# coding=utf-8
from selenium import webdriver TIME_OUT=5 #超时时间 class BasePage(object):
def __init__(self, driver):
"""初始化浏览器"""
self.driver = driver
'''
if driver_type == "ie":
try:
self.driver = webdriver.Ie()
except Exception,e:
print e
elif driver_type == "chrome":
try:
self.driver = webdriver.Chrome()
except Exception,e:
print e
else:
try:
self.driver = webdriver.Firefox()
except Exception,e:
print e
''' def opendriver(self, url):
self.driver.get(url)
self.driver.maximize_window()
self.driver.implicitly_wait(TIME_OUT) def find_element(self, by, value):
"""查找元素"""
try:
return self.driver.find_element(by=by, value=value)
except Exception, e:
print e def find_elements(self, by, value):
"""查找元素集合"""
try:
return self.driver.find_elements(by=by, value=value)
except Exception, e:
print e def is_element_isexist(self, By, Value):
"""判断元素是否存在"""
try:
self.driver.find_element(by=By, value=Value)
return True
except Exception, e:
print e
return False def close(self):
"""当前关闭浏览器tab"""
try:
self.driver.close()
except Exception,e:
print e def quit(self):
"""退出浏览器进程"""
try:
self.driver.quit()
except Exception,e:
print e

具体页面封装和操作LoginPage.py

# coding=utf-8
from BasePage import BasePage
from selenium.webdriver.common.by import By class LoginPage(BasePage):
'''
登录页面的登录窗口
'''
user_name = (By.NAME, "username")
pass_word = (By.NAME, "password")
btn_login = (By.CLASS_NAME, "login-btn") def __init__(self, driver):
BasePage.__init__(self, driver)
self.driver = driver
self.input_username = self.find_element(*self.user_name)
self.input_password = self.find_element(*self.pass_word)
self.btn_login = self.find_element(*self.btn_login) def login(self, username, password):
self.input_username.send_keys(username)
self.input_password.send_keys(password)
self.btn_login.click()
# coding=utf-8
from BasePage import BasePage
from selenium.webdriver.common.by import By class Index(BasePage):
'''
首页
'''
user_menu = (By.ID, "userSetting")
user_info = (By.XPATH, "//a[@href='user/userInfo']")
language_span = (By.ID, "changeLanguage")
chinese_li = (By.XPATH, "//li[@value='zh_cn']")
english_li = (By.XPATH, "//li[@value='en']") def __init__(self, driver):
BasePage.__init__(self, driver)
self.driver = driver
self.usermenu = self.find_element(*self.user_menu)
self.userinfo = self.find_element(*self.user_info)
self.languagespan = self.find_element(*self.language_span)
self.chinase = self.find_element(*self.chinese_li)
self.english = self.find_element(*self.english_li) def chengeLanguage(self):
self.languagespan.click()
self.english.click()
self.driver.implicitly_wait(5)

2、Report: 测试报告文件夹

3、testcases: 具体测试用例实现

测试用例基类BaseCase.py,负责执行用例运行前和运行结束后操作

# coding=utf-8

import unittest
import Logger
from selenium import webdriver log = Logger.Loger()
class BaseCaseClass(unittest.TestCase): def setUp(self):
# options = webdriver.ChromeOptions()
# options.add_experimental_option("excludeSwitches",["ignore-certificate-errors"])
# options.add_argument("--user-data-dir=C:/Users/Administrator/AppData/Local/Google/Chrome/User Data/Default");
# self.driver = webdriver.Chrome(chrome_options=options)
self.driver = webdriver.Ie()
self.url = "http://baidu.com" def tearDown(self):
self.driver.close() def loginfo(self, msgStr):
log.info(msgStr)

具体用例:

# coding=utf-8

from BaseCase import BaseCaseClass
from functiontest.models.LoginPage import LoginPage
from functiontest.models.IndexPage import Index
from functiontest.futil import Util class CheckLogin(BaseCaseClass): def runTest(self):
'''
name:测试标题为:XX系统
verbosity:0
'''
self.driver.get(self.url)
loginPage = LoginPage(self.driver)
self.assertEqual(loginPage.driver.title,u"XX系统","标题不正确") class CheckIndex(BaseCaseClass): def runTest(self):
'''
name:测试首页存在个人资料选项
verbosity:0
'''
self.driver.get(self.url)
#self.driver.switch_to_window(self.driver.window_handles[1])
loginPage = LoginPage(self.driver)
loginPage.login("admin", "xxx")
indexPage = Index(self.driver)
indexPage.chengeLanguage()
indexPage = Index(self.driver)
indexPage.usermenu.click()
Util.highLight(self.driver, indexPage.userinfo)
self.assertEqual(indexPage.userinfo.text, "Personal Data","标题不正确")

Python web功能&接口自动化测试框架搭建——接口用例实现

Python web功能&接口自动化测试框架搭建——接口公共方法

Python web功能&接口自动化测试框架搭建——接口测试模块

Python web功能&接口自动化测试框架搭建——功能测试模块

Python web功能&接口自动化测试框架搭建——测试用例执行和结果收集

Python web功能&接口自动化测试框架搭建——通用模块

Python web功能&接口自动化测试框架搭建——unittest介绍

Python web功能&接口自动化测试框架搭建——环境搭建

python web自动化测试框架搭建(功能&接口)——功能测试模块的更多相关文章

  1. python web自动化测试框架搭建(功能&接口)——接口测试模块

    Python接口测试采用python读取excel的方法,通过requests库发送请求和接收响应.模块有: Data:用于存放excel用例的,用例格式: iutil: 接口公共方法,数据引擎.ht ...

  2. python web自动化测试框架搭建(功能&接口)——通用模块

    1.通用模块: config.conf: 公共配置文件,配置报告.日志.截图路径,以及邮件相关配置 [report] reportpath = E:\workspace\WebAutomation\s ...

  3. python web自动化测试框架搭建(功能&接口)——接口用例实现

    测试用例基类: # coding=utf-8 import unittest import Logger log = Logger.Loger() class BaseCase(unittest.Te ...

  4. python web自动化测试框架搭建(功能&接口)——接口公共方法

    接口公共方法有:数据引擎.http引擎.Excel引擎 1.数据引擎:获取用例.结果检查.结果统计 # -*- coding:utf-8 -*- from XlsEngine import XlsEn ...

  5. python web自动化测试框架搭建(功能&接口)——测试用例执行和结果收集

    由于unittest框架中结果收集在不同文件中,所以此处重写结果收集方法,加入执行时间,失败信息,失败截图等 TestRunner.py # coding=utf-8 import sys impor ...

  6. Python web自动化测试框架搭建(功能&接口)——unittest介绍

    Python UnitTest测试框架介绍 1)         TestCase:所有测试用例类继承的基本类, TestCase的实例就是测试用例 2)         TestSuite:测试套件 ...

  7. python web自动化测试框架搭建(功能&接口)——环境搭建

    自动化测试框架一般需要实现以下通用功能 执行前准备 结束后清理 执行步骤输出 执行结果输出 错误.失败截图 测试报告 发送邮件 日志 需要的软件和python第三方库有: 通用: JDK Eclips ...

  8. 基于python的自动化测试框架搭建

    滴~ 今日打卡!   好多天没来打卡了.博主最近一直在把碎片化知识转化为知识体系的过程中挣扎.Python语言.selenium.unittest框架.HTMLTestRunner框架都有所了解,也写 ...

  9. selenium +python web自动化测试环境搭建

    基础框架搭建 1.安装python 2.安装selenium cmd输入pip install selenium 问题:在python中输入from selenium import webdriver ...

随机推荐

  1. Java类和对象的内存分配

    类的加载时机: 1.创建对象 2.调用类的静态成员 3.加载子类 类在实例化后的内存分配 1.每次创建对象时,都需要进行加载和创建2个操作: ① 先去判断需要的类是否已经加载,如果已经加载了,则无需再 ...

  2. winCE/Windows 应用程序消息提示框自动消失功能

    近期在做winCE系统的扫描枪应用程序,遇到了一些问题,其中包括消失提示框在手持终端显示过小, 用户要求提示框提示几秒后自动关闭,Windows平台可以通过调用系统API以定时器的方式进行自动销毁. ...

  3. <每日一题> Day6:HDU递推专题完结

    原题链接 这是我自己Clone的专题,A,B题解昨天发过了 C:参考代码: /* 很容易我们可以手推出n = 1, 2, 3时的情况,我们假设前n - 1 列已经放好,方法有dp[n - 1]种,第n ...

  4. BZOJ 4987 (树形DP)

    ###题面 https://www.lydsy.com/JudgeOnline/problem.php?id=4987 ###分析 先考虑贪心,显然k个节点形成一棵树 求出树的直径,显然直径应该只被经 ...

  5. POJ3321[苹果树] 树状数组/线段树 + dfs序

    Apple Tree Time Limit: 2000MS   Memory Limit: 65536K Total Submissions:39452   Accepted: 11694 Descr ...

  6. ofbiz16.11.04(环境搭建)

    ofbiz16.11.04(环境搭建) 版本说明: ofbiz 16.11.04 下载地址:http://ofbiz.apache.org/download.html gradle 4.9 下载地址: ...

  7. C# 委托 多线程

    C#委托和多线程[转载] 很多时候写windows程序都需要结合多线程,在.net中用如下得代码来创建并启动一个新的线程.public void ThreadProc();Thread thread ...

  8. ASE Alpha Sprint - backend scrum 5

    本次scrum于2019.11.10再sky garden进行,持续30分钟. 参与人: Zhikai Chen, Jia Ning, Jiyan He 请假: Xin Kang, Lihao Ran ...

  9. 【转】WebRTC之RTCP

    转自:https://blog.csdn.net/momo0853/article/details/88051312#RTPFBTransport_layer_FB_messagesNACKTrans ...

  10. 10java进阶——IO2

    1. Properties类 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串. 特点: Hashtable的子 ...