学生信息管理系统之测试篇

学生信息管理系统之测试篇

*
一、学生信息管理系统测试用例设计
二、使用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导入到当前模块中,所以在后面的代码中就可以直接通过 fibfib2访问模块 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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Python之模块导入(不看会后悔系列)

    看到这个标题猜想大家内心OS: 什么辣鸡水文,划走划走~ 别急 有干货! 静态导入(照顾新人) 假设现在有两个文件a,b在不同目录,b文件想引用a文件中的函数: # test_mo…

    Python 2022年10月6日
    082
  • Python | Python语法基础

    为什么想起学Python了? 之所以想起学学Python是有三个缘由。从时间顺序上看,首先是在10月中旬,笔者去学校招聘会走了走,发现招Python开发的挺多的,有在线教育、智慧城…

    2022年9月5日
    0110
  • pytorch 、numpy杂记

    1&#x3001;torch. matmul&#xFF08;&#xFF09;&#x5C31;&#x662F;&#x7B80;&amp…

    Python 2023年1月11日
    027
  • 变量的定义和使用

    在编程语言中,变量是指可以存储和表示数据的抽象概念,可以理解为存储数据的容器。可以通过变量名访问变量中的值。 [En] In programming languages, vari…

    Python 2023年2月3日
    019
  • 业务脚本封装一

    业务脚本类型 01、独立+无序 02、独立+有序 03、关联+单一参数传递 04、关联+多个参数传递 01、独立+无序 的脚本封装 设计思路 脚本实例: #************…

    Python 2023年1月18日
    030
  • 区块链骇客第一讲:重入攻击

    本篇文章开启区块链骇客专栏的第一讲,让我决心开写本专栏的首要原因是对未来的职业选择有了一个确定的规划。日后的更新频率将会不小于等于每周一讲,欢迎各位读者监督和指正,一起学习一同进步…

    Python 2023年2月6日
    015
  • Java 函数式编程

    一、Lambda表达式 在数学中,函数就是有输入量、输出量的一套计算方案,也就是”拿数据做操作” 面向对象思想强调”必须通过对象的形式来做事情&…

    Python 2023年2月6日
    010
  • 使用gunicorn部署flask为并发模式

    一般不会直接使用flask进行部署,因为扛不住高并发 一般需要wsgi 这里我是使用的gunicorn 使用之前需要安装gunicorn pip install gunicorn …

    Python 2023年1月6日
    042
  • word文档样式批量处理,久违了

    这里批量处理word文档的操作主要是通过python-docx非标准库实现的,通过定位到文档对象、再到段落、最后到一行文本从而完成针对文字对象的处理。 【阅读全文】 使用pip的方…

    Python 2023年2月3日
    016
  • Linux 下配置 hosts 并设置免密登录

    原文地址: 实现 Linux 下(基于 CentOS 7)两个节点之间进行免密登录。 操作系统:CentOS 7 需要准备两个节点,一个是 master 节点,另一个是 slave…

    Python 2023年1月30日
    028
  • python不能导入mysql_Python导入数据到MySQL常见问题

    今天练习Python导入csv数据到MySQL,使用代码如下: import pandas as pd from sqlalchemy import create_engine M…

    Python 2023年1月9日
    019
  • 策略模式

    风带着万物全部飘散,可那飘散的不是万物,而是我的青春 一个简单的鸭子应用 使用简单继承的模式实现多个不同的鸭子实现类。 新需求 – 鸭子能飞 现在公司为了甩开其他竞争者…

    Python 2023年1月29日
    018
  • restful 规范与 drf 的安装使用 & drf 中 APIView 源码分析

    内容概要 web 开发模式 API 接口 postman 测试软件的使用 restful 规范 drf 的安装与使用 cbv 的 View 源码分析 APIView 源码分析 dr…

    2022年9月5日
    0122
  • 一篇搞定Sql联表查询

    文章目录 前言 级联 联表查询 * 左/右联表 多表联查 前言 刚好最近玩mybatisplus,就顺便再整理一下有关Sql 的内容。本来是想要全部整理一下的,突然发现前面也写了一…

    Python 2022年12月28日
    068
  • 1.Series和DataFrame

    0.文件的导入和导出 ① Excel 1.导入表格 df=pd.read_excel(‘1月.xlsx’,sheet_name=’莫寒’) 不指定sheet则导入第一张 2.导入指…

    Python 2023年1月8日
    054
  • 电商项目部署—-shoppe项目(基于Django)

    文章目录 0. 打包Vue项目 1. 配置环境 2. 迁移项目到云服务器 3. 使用uWSGI启动Django项目 4. 配置nginx反向代理 5. nginx管理静态文件 6….

    Python 2022年12月27日
    040
最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总