05-单个用例的初始化、清除

  • 上述两条用例打开浏览器、登录做了两遍
  • 测试重点并不是登录功能,比较合适的做法是在执行用例前系统应该处于打开浏览器、登录的状态
 1 from time import sleep
 2 from lib.webui import *
 3 
 4 
 5 class UI_0101:
 6     name = '检查操作菜单 UI_0101'
 7 
 8     # 初始化方法
 9     def setup(self):
10         open_browser()
11         mgr_login()
12 
13     # 清除方法
14     def teardown(self):
15         wd = GSTORE['wd']
16         wd.quit()
17 
18     def teststeps(self):
19 
20         STEP(1, '获取左边菜单栏')
21         wd = GSTORE['wd']
22         eles = wd.find_elements(By.CSS_SELECTOR, '.sidebar-menu span')
23         menuText = [ele.text for ele in eles]
24         INFO(menuText)
25         STEP(2, '检查左边菜单栏')
26         CHECK_POINT('检查菜单是否正确', ['客户', '药品', '订单'] == menuText[:3])
27 
28 
29 class UI_0102:
30     name = '添加客户 UI_0102'
31 
32     # 初始化方法
33     def setup(self):
34         open_browser()
35         mgr_login()
36 
37     # 清除方法
38     def teardown(self):
39         wd = GSTORE['wd']
40         wd.quit()
41 
42     def teststeps(self):
43 
44         STEP(1, '点击左侧客户菜单')
45         wd = GSTORE['wd']
46         # 先找到上层节点,缩小查找范围
47         sidebarMenu = wd.find_element(By.CLASS_NAME, 'sidebar-menu')
48 
49         # 再找到内部元素
50         elements = sidebarMenu.find_elements(By.TAG_NAME, 'span')
51 
52         # 第一个span对应的菜单是 客户,点击它
53         elements[0].click()
54 
55         STEP(2, '添加客户')
56 
57         # 点击添加客户按钮
58         wd.find_element(By.CLASS_NAME, 'glyphicon-plus').click()
59 
60         # form-contorl 对应3个输入框
61         inputs = wd.find_elements(By.CSS_SELECTOR, '.add-one-area .form-control')
62 
63         # 输入客户姓名
64         inputs[0].send_keys('南京中医院')
65         # 输入联系电话
66         inputs[1].send_keys('2551867858')
67         # 输入客户描述
68         inputs[2].send_keys('江苏省-南京市-秦淮区-汉中路-16栋504')
69 
70         # 第1个 btn-xs 就是创建按钮, 点击创建按钮
71         wd.find_element(By.CSS_SELECTOR, '.add-one-area .btn-xs').click()
72 
73         # 等待1秒
74         sleep(1)
75 
76         STEP(3, '检查添加信息')
77 
78         # 找到 列表最上面的一栏
79         item = wd.find_elements(By.CLASS_NAME, 'search-result-item')[0]
80 
81         fields = item.find_elements(By.TAG_NAME, 'span')[:6]
82 
83         texts = [field.text for field in fields]
84         INFO(texts)
85 
86         # 预期内容为
87         expected = [
88             '客户名:',
89             '南京中医院',
90             '联系电话:',
91             '2551867858',
92             '地址:',
93             '江苏省-南京市-秦淮区-汉中路-16栋504'
94         ]
95 
96         CHECK_POINT('客户信息和添加内容一致 ',
97                     texts == expected)
  • 执行过程跟之前没有差别,还是会打开两次浏览器分别执行用例。
  • 测试报告中会有用例初始化、用例清除的体现
  • 单个用例的初始化是在用例对应的类中添加setup和teardown方法
  • hytest执行用例时,先执行setup,再执行teststeps,最后执行teardown
  • 如果setup初始化失败(有异常),就不会执行后续的两个操作
  • 如果teststeps执行失败,仍然会执行teardown,确保环境被还原,也就是只要初始化了,肯定要还原

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/877716.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows环境变量列表变成老式的横行封号分割PATH路径不方便

前言全局说明win11上环境变量的增、删、改有了专用的列表框,每行一个的环境变量,观察也非常方便。 但有的时候设置完变量,再次打开PATH环境变量,就变成以前win7那样的所有环境变量都在一行,用封号分割了,非常不方便。一、说明 1.1 环境: Windows 11 家庭版 23H2 22631.37…

Spring MVC 初始化

继承关系 DispatcherServlet > FrameworkServlet > HttpServletBean > HttpServlet > GenericServlet > Servlet初始化流程DispatcherServlet 是一个 Servlet,所有的 Servlet 初始化都会执行 init 方法(JAVA EE 的知识,别忘了)HttpServletBean 复写了 init(…

kmp匹配

kmp匹配 代码: #include<bits/stdc++.h> using namespace std; const int N=1e5+6; const int M=1e6+6; char s[M];//长串 char p[N];//模式串 int ne[N];//next指针 ,后退的指针 int main(){int n,m;cin>>n>>p+1>>m>>s+1;//计算ne //ne[1]…

Tokenizer

一、思维导图二、subword(子词)粒度 在很多情况下,既不希望将文本切分成单独的词(太大),也不想将其切分成单个字符(太小),而是希望得到介于词和字符之间的子词单元。这就引入了 subword(子词)粒度的分词方法。本文重点介绍这一部分。 2.1 WordPiece 在BERT时代,Wor…

MyBatis之作用域和生命周期

弄清楚SqlSessionFactoryBuild,SqlSessionFactory,SqlSession的作用域和生命周期,可以避免高并发程序中的资源浪费 具体知识点看狂神的两张ppt就行了

CF856C 题解

很厉害的排列计数0 原题链接:luogu & CF 在任务清单里放了半年,今天终于做出来了 qwq,不得不写题解了。 1 能被 \(11\) 整除的数长什么样子?它的奇数位之和与偶数位之和应当模 \(11\) 同余。 我们不妨把一个数的价值定为从前往后奇数位之和减去偶数位之和模 \(11\) 的值…

人生不止于职业发展

0 你的问题,我知道! 工作意义是啥?职业发展在人生啥角色? 1 工作意义 农村人努力学习考上大学,得好工作,为逃离同村同龄人十几岁就工厂打工命运,过不凡人生,实现改命的唯一途径。毕业就进入自带光环的大厂,有份让所有亲戚羡慕的公司和薪水。我认为工作价值是让自己自立…

『Python底层原理』--CPython如何编译代码

前一篇我们介绍了CPython VM的运行机制,它基于一系列字节码指令来实现程序逻辑。 不过,Python字节码在完整描述代码功能上存在局限性,于是代码对象应运而生。像模块、函数这类代码块的执行,本质上就是对应代码对象的运行,代码对象涵盖了字节码、常量、变量名以及各类属性信…

MyBatis之jdbc属性外部配置

将jdbc数据库连接属性写在db.properties中,如图 然然后在配置文件中引入

25.2.1小记

Object类Object类中自带的toString和equals函数(默认比较管理者是否管理相同的对象,可以通过对子类函数的重构实现正常比较) // @Override//重写,编译器会默认构造类型检查public boolean equals(Object obj) {//向下造型CD cc = (CD)obj;return artist.equals(cc.artist…

“尝试一下挣钱的辛苦”之装师

我尝试了把我做的兽头卖出去,记录一下从孩子出生到找到妈咪领养的过程 因为没有太多预算,所以兽设没有找画师,我自己构思的;整个制作过程都要用到热熔胶,很容易烫到>_<(热熔胶——手作娘离不开的东西),梳理毛布也很让人头疼,弄得房间里都是毛毛,虽然但是,孩子…

“尝试一下挣钱的辛苦”

我尝试了把我做的兽头卖出去,记录一下从孩子出生到找到妈咪领养的过程 因为没有太多预算,所以兽设没有找画师,我自己构思的;整个制作过程都要用到热熔胶,很容易烫到>_<(热熔胶——手作娘离不开的东西),梳理毛布也很让人头疼,弄得房间里都是毛毛,虽然但是,孩子…