学生信息管理系统之测试篇
*
– 一、学生信息管理系统测试用例设计
– 二、使用selenium工具对项目进行自动化测试
–
+ 2.1 测试登录功能及登录后的查询功能
+ 2.2 测试列表页的增加用户和删除用户功能
+ 2.3 生成HTML报告
一、学生信息管理系统测试用例设计

; 二、使用selenium工具对项目进行自动化测试
2.1 测试登录功能及登录后的查询功能
- 测试输入正确的用户名和密码是否能够正常登录,输入错误的用户名和密码是否登录失败,当登录失败时,对异常进行处理,对错误进行截图,并将弹窗中的错误信息打印在控制台。
- 测试列表页面的查询功能,分别输入姓名、籍贯、邮箱看是否能查出正确的学生信息。
from selenium import webdriver
import unittest
import time
import os
from selenium.common.exceptions import NoAlertPresentException
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
class Testlogin(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.url = "http://101.42.153.174:8082/login.html"
self.driver.get(self.url)
self.driver.maximize_window()
time.sleep(3)
def tearDown(self):
self.driver.quit()
def test_login(self):
driver = self.driver
driver.find_element_by_id("loginname").send_keys("admin")
driver.find_element_by_id("loginname").send_keys(Keys.TAB)
driver.find_element_by_id("password").send_keys("1234578")
driver.find_element_by_id("submit").send_keys(Keys.ENTER)
time.sleep(6)
alert = driver.switch_to.alert
time.sleep(3)
alert_content = alert.text
alert.accept()
try:
self.assertEqual(alert_content, "恭喜,登录成功!", msg="登录失败")
except:
if not os.path.exists("./image"):
os.makedirs("./image")
now = time.strftime("%Y%m%d-%H%M%S", time.localtime(time.time()))
driver.get_screenshot_as_file('./image/' + now + '-' + 'error.png')
print(alert_content)
def test_select(self):
driver = self.driver
driver.find_element_by_id("loginname").send_keys("admin")
driver.find_element_by_id("loginname").send_keys(Keys.TAB)
driver.find_element_by_id("password").send_keys("12345678")
driver.find_element_by_id("submit").send_keys(Keys.ENTER)
time.sleep(6)
driver.switch_to.alert.accept()
driver.find_element_by_id("ipt_name").send_keys("赵亮")
time.sleep(1)
driver.find_element_by_id("submit1").send_keys(Keys.ENTER)
time.sleep(3)
driver.find_element_by_id("ipt_name").clear()
driver.find_element_by_id("ipt_address").send_keys("成都")
time.sleep(1)
driver.find_element_by_id("submit1").send_keys(Keys.ENTER)
time.sleep(3)
driver.find_element_by_id("ipt_address").clear()
driver.find_element_by_id("ipt_email").send_keys("123123@qq.com")
time.sleep(1)
driver.find_element_by_id("submit1").send_keys(Keys.ENTER)
time.sleep(3)
if __name__ == "__main__":
unittest.main(verbosity=2)

2.2 测试列表页的增加用户和删除用户功能
- 测试添加用户的功能,输入正确的信息是否能够注册成功,当一条信息注册成功后,再次执行该测试用例,看这条信息是否添加失败。
- 测试删除单条用户信息,测试删除刚刚添加的用户功能是否正常,通过对比点击删除后弹窗中的内容来判断是否删除成功。
from selenium import webdriver
import unittest
import time
import os
from selenium.common.exceptions import NoAlertPresentException
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
class Testlist(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.url = "http://101.42.153.174:8082/login.html"
self.driver.get(self.url)
self.driver.maximize_window()
time.sleep(3)
def tearDown(self):
self.driver.quit()
def test_add(self):
driver = self.driver
driver.find_element_by_id("loginname").send_keys("admin")
driver.find_element_by_id("loginname").send_keys(Keys.TAB)
driver.find_element_by_id("password").send_keys("12345678")
driver.find_element_by_id("submit").send_keys(Keys.ENTER)
time.sleep(6)
driver.switch_to.alert.accept()
time.sleep(3)
driver.find_element_by_css_selector("body > div > div:nth-child(3) > a:nth-child(1)").send_keys(Keys.ENTER)
time.sleep(3)
driver.find_element_by_id("username").send_keys("周董")
time.sleep(1)
driver.find_element_by_id("loginname").send_keys("东东")
time.sleep(1)
driver.find_element_by_id("password").send_keys("123")
time.sleep(1)
driver.find_element_by_id("password2").send_keys("123")
time.sleep(1)
driver.find_element_by_id("women").click()
time.sleep(1)
driver.find_element_by_id("age").send_keys("18")
time.sleep(1)
driver.find_element_by_id("address").find_element_by_tag_name("option")
time.sleep(1)
driver.find_element_by_id("qq").send_keys("18")
time.sleep(1)
driver.find_element_by_id("email").send_keys("1234@qq.com")
time.sleep(5)
driver.find_element_by_id("btn_sub").click()
time.sleep(6)
alert = driver.switch_to.alert
time.sleep(3)
alert_content = alert.text
alert.accept()
try:
self.assertEqual(alert_content, "恭喜,添加成功!", msg="添加失败")
except:
if not os.path.exists("./image"):
os.makedirs("./image")
now = time.strftime("%Y%m%d-%H%M%S", time.localtime(time.time()))
driver.get_screenshot_as_file('./image/' + now + '-' + 'error.png')
print(alert_content)
def test_del(self):
driver = self.driver
driver.find_element_by_id("loginname").send_keys("admin")
driver.find_element_by_id("loginname").send_keys(Keys.TAB)
driver.find_element_by_id("password").send_keys("12345678")
driver.find_element_by_id("submit").send_keys(Keys.ENTER)
time.sleep(6)
driver.switch_to.alert.accept()
time.sleep(3)
driver.find_element_by_xpath('//*[@id="all"]/li[4]/a').click()
time.sleep(3)
driver.find_element_by_xpath('//*[@id="info"]/tr[2]/th[10]/a[2]').click()
time.sleep(6)
driver.switch_to.alert.accept();
time.sleep(3)
alert = driver.switch_to.alert
time.sleep(3)
alert_content = alert.text
alert.accept()
try:
self.assertEqual(alert_content, "恭喜,删除成功!", msg="删除失败")
except:
if not os.path.exists("./image"):
os.makedirs("./image")
now = time.strftime("%Y%m%d-%H%M%S", time.localtime(time.time()))
driver.get_screenshot_as_file('./image/' + now + '-' + 'error.png')
print(alert_content)
if __name__ == "__main__":
unittest.main(verbosity=2)

2.3 生成HTML报告
我们将该文件夹下的所有测试脚本中的测试用例全部放入测试套件,一次性测试所有的功能,并生成HTML报告,测试报告中包含每个测试脚本中的测试用例的个数、测试通过的个数、失败的个数、错误的个数以及每个测试用例的错误细节。
import HTMLTestRunner
import os
import sys
import time
import unittest
def createsuite():
discovers = unittest.defaultTestLoader.discover("../usermanagerTest", pattern="um_*.py", top_level_dir=None)
print(discovers)
return discovers
if __name__=="__main__":
curpath = sys.path[0]
print(sys.path)
print(sys.path[0])
if not os.path.exists(curpath+'/resultreport'):
os.makedirs(curpath+'/resultreport')
now = time.strftime("%Y-%m-%d-%H %M %S", time.localtime(time.time()))
print(now)
print(time.time())
print(time.localtime(time.time()))
filename = curpath + '/resultreport/' + now + 'resultreport.html'
with open(filename, 'wb') as fp:
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u"测试报告",
description=u"用例执行情况", verbosity=2)
suite = createsuite()
runner.run(suite)

HTML测试报告:

Original: https://blog.csdn.net/weixin_48271092/article/details/126634888
Author: 一个很酷的女巫_
Title: 学生信息管理系统之测试篇
相关阅读
Title: 模块
在编写程序的过程中,在一个脚本中维护和使用所有代码肯定不容易。
[En]
It is certainly not easy to maintain and use all the code in one script during the process of writing a program.
python有一种方法可以把定义放在一个脚本里,并在其他脚本或解释器的交互式实例中使用他们。
这样的脚本被称为模块。
模块中的定义可以导入到其他模块中。
案例:
在当前目录下创建一个名为 fibo.py
的文件,文件内容如下:
# fibo.py
# 斐波那契数列 模块
def fib(n): # 打印斐波那契数列到数n
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a+b
print()
def fib2(n): # return Fibonacci series up to n
result = []
a, b = 0, 1
while a < n:
result.append(a)
a, b = b, a+b
return result
导入模块
通过关键字 import
可以在代码中导入写好的模块,语法如下:
import 模块名
现在,再在当前目录下创建一个名为 main.py
的文件。然后编写如下代码:
# main.py
import fibo
fibo.fib(10)
运行后输出:
0 1 1 2 3 5 8
语句 import fibo
会在当前脚本中导入变量 fibo
,它表示模块 fibo
,然后通过 fibo.fib
就可以访问模块 fibo
中定义好的函数,然后执行。
import
语句有一个变体,它可以把模块中的名称(函数,变量,类名)直接导入到当前模块的变量表里,语法如下:
from 模块名 import 名称
修改 main.py
文件里的代码如下:
# main.py
from fibo import fib, fib2
fib2(10)
运行后输出:
[0, 1, 1, 2, 3, 5, 8]
语句 from fibo import fib, fib2
,直接将模块 fibo
中的函数 fib
, fib2
导入到当前模块中,所以在后面的代码中就可以直接通过 fib
, fib2
访问模块 fibo
中对应的函数。
还有一个变体可以导入定义的所有名称,语法如下:
from 模块名 import *
这将导入模块中不以下划线开头的所有名称。通常不推荐使用此功能,因为它会在解释器中引入一组未知的名称,这可能会覆盖您先前定义的内容,并导致代码的可读性较差。但是,为了节省打字时间,您可以在交互运行时使用它。
[En]
This imports all names in the module that do not begin with an underscore. This feature is generally not recommended because it introduces an unknown set of names into the interpreter, which may overwrite what you have previously defined and lead to poor readability of the code. However, in order to save typing, you can use it this way when running interactively.
有时,需要导入的定义名称可能与当前模块中的定义同名,您可以通过以下变体自定义导入名称:
[En]
Sometimes, the definition name that needs to be imported may have the same name as the definition in the current module, and you can customize the import name through the following variants:
import 模块名称 as 新名称
from 模块名称 import 名称 as 新名称
例如:
>>> import fibo as fib
>>> fib.fib(10)
0 1 1 2 3 5 8
>>> from fibo import fib as fibonacci
>>> fibonacci(10)
0 1 1 2 3 5 8
Original: https://www.cnblogs.com/superwuchaofan/p/16642979.html
Author: python心蓝
Title: 模块
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/285879/
转载文章受原作者版权保护。转载请注明原作者出处!