Selenium UI 自动化数据驱动框架简单实现

红客联盟 · June 07, 2018 · 2327 hits

自我介绍一下,我是一枚计算机专业的应届生。这是第一次在社区发技术帖,最近一直在学习测试这一块内容,平时喜欢写一些代码玩一下,现在把写的东西发出来大家看看有什么可以改进的问题,避免自己闭门造车,也记录和整理一下自己的思路,方便以后查看

数据驱动框架

1.不是一种技术,而是一种理念,个人觉得和MVC设计模式有一些相似的地方

2.测试代码和测试数据分离,易于维护,而且测试用例和代码开发可以同步进行,提高效率

3.是关键字驱动的低级版本

项目结构

1.case包:用例包,存放测试用例

2.common包:公共包,存放公共模块

3.data包:数据包,存放输入输出的数据

4.read_excel包:读取数据,根据输入的不同模块、类和方法调用不同测试用例

主要代码模块

class login:#系统登录模块
def __init__(self,driver):
self.driver=driver
def login(self):
self.driver.find_element_by_id('emp_no').send_keys('admin')
self.driver.find_element_by_id('password').send_keys('admin')
self.driver.find_element_by_xpath('/html/body/div/div/div/div[2]/div[2]/form/div[4]/div/input').click()

登录系统的公用模块分离出来单独调用

class setup:#驱动初始化模块
def __init__(self):
driver=webdriver.Firefox()
driver.implicitly_wait(30)
driver.maximize_window()
driver.get("http://localhost/smeoa/login")
self.driver=driver

驱动初始化模块也是公共模块

class start():#控制模块,包括用例执行,验证,将验证结果写入日志
def __init__(self):
dr=setup().driver
login(dr).login()
self.dr=dr
def case(self,li):
ribao(self.dr).ribao(li[0],li[1])
biaoti = self.dr.find_element_by_xpath(
'/html/body/div[2]/div/div[2]/div[2]/div/div/div[4]/ul/li[2]/div[3]/a').text
print(biaoti)
if li[0] == biaoti:
print('success')
self.read('success')
else:
print('false')
self.read('false')
def read(self,info):
with open(r"D:\python\python-test\demo\selenium_package\auto_moudle\data\log.txt",'a+') as f:
content=f.write(info+'\n')
def __del__(self):
time.sleep(5)
self.dr.close()
#测试数据读取
book=xlrd.open_workbook(r'D:\python\python-test\demo\selenium_package\auto_moudle\data\case.xlsx')
s=book.sheets()[0]
for i in range(1,s.nrows):
read=s.row_values(i)
li=read[3:]
print(read)
#测试模块动态调用
__import__('demo.selenium_package.auto_moudle.case.'+read[0])
m=sys.modules['demo.selenium_package.auto_moudle.case.'+read[0]]
type=getattr(m,read[1])
method=getattr(type(),read[2])
method(li)
class ribao:#测试用例
def __init__(self,driver):
self.driver=driver
def ribao(self,name,text):
self.driver.find_element_by_xpath('/html/body/nav/div[2]/ul/a[7]/i').click()
self.driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[2]/div/div/div[3]/div/div[2]/a').click()
self.driver.find_element_by_id('name').send_keys(name)
self.driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[2]/div/div/form/div[2]/div/div/a').click()
self.driver.switch_to.frame(self.driver.find_element_by_class_name('myFrame'))

输入数据展示

后记

1.其实就是个面向对象思想的实践,然后用反射机制加载类实现动态模块加载,仔细想一下还是不难,但是感觉有很多不足,欢迎大佬指正
2.还可以自动生成漂亮的测试报表,代码都研究好了,还没来得及整合进来。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
No Reply at the moment.
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up