自我介绍一下,我是一枚计算机专业的应届生。这是第一次在社区发技术帖,最近一直在学习测试这一块内容,平时喜欢写一些代码玩一下,现在把写的东西发出来大家看看有什么可以改进的问题,避免自己闭门造车,也记录和整理一下自己的思路,方便以后查看
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.还可以自动生成漂亮的测试报表,代码都研究好了,还没来得及整合进来。