小说网站测试

news2024/11/26 2:47:56

目录

通用测试点

 登录页面测试

 接口测试

UI测试

注册页面

 接口自动化

UI测试

忘记密码页面

 接口测试

 UI测试

 修改密码页面

进行接口测试

 UI测试

主页页面测试

分类页面测试

​查询页面测试

作者页面测试

阅读小说页面测试

书架页面测试


通用测试点

 登录页面测试

 接口测试

2.1、使用接口测试,测试多种结果的返回情况

主要包括:

  • 1、数据输入存在未输入情况
  • 2、数据输入null值
  • 3、数据输入长度不符合要求 (使用等价类,比如用户名长度[3,10],测试长度为2,3,10,11的情况)
  • 4、数据输入类型不匹配
  • 5、用户名不存在 
  • 6、验证码错误
  • 7、验证码过期(两分钟)
  • 8、用户名密码不匹配
  • 9、用户名称,密码包括特殊字符
  • 10、用户登陆成功

包含25个测试用例

UI测试

使用UI测试,检测不同情况下的页面展示情况

1、测试前6个数据

import time
import uuid

from selenium import  webdriver

import pytest
from selenium.webdriver.common.by import By
from selenium.webdriver.support import wait, expected_conditions
import requests
from selenium.webdriver.support.wait import WebDriverWait

class TestLogin():
    @pytest.mark.parametrize(('name,password,verification,body'),
   [["","123","123","存在未输入数据"],["123", "", "23", "存在未输入数据"], ["123", "123", "", "存在未输入数据"],
    ['1', '12345678910', '1234',"用户名或者密码不符合要求"], ['lyq', "123", "1234", "用户名或者密码不符合要求"],
    ["lyq","12345678910","1","验证码错误"]]  )
    def test_login(self,name,password,verification,body,getDriver):
        getDriver.get("http://localhost:8080/novel/login.html")
        Name=getDriver.find_element(By.XPATH,'//*[@id="username"]')
        Password = getDriver.find_element(By.XPATH, '//*[@id="password"]')
        Ver= getDriver.find_element(By.XPATH, '//*[@id="code"]')
        Name.send_keys(name)
        Password.send_keys(password)
        Ver.send_keys(verification)
        time.sleep(1)
        view =getDriver.find_element(By.XPATH,'//*[@id="view"]')
        view.click()
        submit=getDriver.find_element(By.XPATH,'//*[@id="submit"]')
        submit.click()
        alert = WebDriverWait(getDriver, timeout=10).until(expected_conditions.alert_is_present())
        time.sleep(2)
        text=alert.text
        print(text)
        alert.accept()
        assert  text==body

2、有的数据需要涉及到验证码的输入,进行手工测试

注册页面

 接口自动化

 

 主要包括:

  • 1、数据输入存在未输入情况
  • 2、数据输入null值  (分为null和"null")
  • 3、数据输入长度不符合要求 (使用等价类,比如用户名长度[3,10],测试长度为2,3,10,11的情况)
  • 4、数据输入类型不匹配
  • 5、用户名已经存在 
  • 6、验证码错误
  • 7、验证码过期(两分钟)
  • 8、邮箱格式验证(长度,10位数字,后缀验证)
  • 9、邮箱已经被注册
  • 10、用户名称,密码,邮箱包含特殊字符
  • 11、验证码刷新,能否正确使用
  • 12、用户一旦注册成功,可以检验是否可以登录

UI测试

1、 提取数据验证

import time
import uuid

from openpyxl.reader.excel import load_workbook
from selenium import  webdriver

import pytest
from selenium.webdriver.common.by import By
from selenium.webdriver.support import wait, expected_conditions
import requests
from selenium.webdriver.support.wait import WebDriverWait
from openpyxl import workbook
from openpyxl.reader.excel import load_workbook


def read(path):
    file = load_workbook(path)  # 打开文件
    graph = file.active  # 打开默认工作表 (第一张)
    # 使用迭代器 遍历每一行的数据 因为数据是从第二行开始的 所以min_row=2,values_only表示只读取数据
    for data in graph.iter_rows(min_row=2, values_only=True):
        yield data  # 迭代返回每一行数据
    # yield让函数变成生成器函数 让函数从上次的位置继续执行


class TestRegister():
    @pytest.mark.parametrize("name,password,surePassword,verification,email,body",
                             read(r"C:\python学习\小说项目测试\界面测试\注册页面测试\data.xlsx"))
    def test_login(self, name, password, surePassword, verification, email, body, getDriver):
       if(name==None):
           name=""
       if(password==None):
           password=""
       if(surePassword==None):
           surePassword=""
       if(verification==None):
           verification=""
       if(email==None):
           email=""
       getDriver.get("http://localhost:8080/novel/register.html")
       getDriver.maximize_window()
       Name = getDriver.find_element(By.XPATH, '//*[@id="username"]')
       Password = getDriver.find_element(By.XPATH, '//*[@id="password"]')
       time.sleep(1)
       view = getDriver.find_element(By.XPATH, '//*[@id="view"]')
       view.click()
       SurePassword = getDriver.find_element(By.XPATH, '//*[@id="password_again"]')
       SureView = getDriver.find_element(By.XPATH, '//*[@id="view_again"]')
       time.sleep(1)
       SureView.click()
       Email = getDriver.find_element(By.XPATH, '//*[@id="email"]')
       Ver = getDriver.find_element(By.XPATH, '//*[@id="code"]')
       Name.send_keys(name)
       Password.send_keys(password)
       SurePassword.send_keys(surePassword)
       Email.send_keys(email)
       Ver.send_keys(verification)
       time.sleep(3)
       submit = getDriver.find_element(By.XPATH, '//*[@id="submit"]')
       submit.click()
       alert = WebDriverWait(getDriver, timeout=10).until(expected_conditions.alert_is_present())
       time.sleep(2)
       text = alert.text
       alert.accept()
       assert text == body

 2、对其他需要获取验证码的数据,进行手工UI测试

忘记密码页面

 接口测试

  • 1、数据输入存在未输入情况
  • 2、数据输入null值  (分为null和"null")
  • 3、数据输入长度不符合要求 (使用等价类,比如用户名长度[3,10],测试长度为2,3,10,11的情况)
  • 4、数据输入类型不匹配
  • 5、用户名和邮箱匹配(用户名称和邮箱校验,其中邮箱不论是QQ.com或者qq.com为后缀,只要前10位数字相同即可)
  • 6、邮箱格式不正确
  • 7、验证码错误,验证码过期
  • 8、邮箱和用户名不匹配(用户名不存在,邮箱不存在,用户名和密码不匹配)

注意:这里如果测试用例中先有一个校验成功的case,会设置一个session,(如果之前的session没有过期)这里获取的是和验证码同一个session,然后session的有效期被更新设置为了5分钟。如果继续设置验证码过期的case(设置两分钟),那么验证码是不会过期的

getsession(true):当参数为true时,若存在会话,则返回该会话,否则创建一个会话

 

 UI测试

1、检测前六个数据

class TestForget():
    @pytest.mark.parametrize(('name,email,verification,body'),
    [["","123","123","存在未输入数据"],["123", "", "124", "存在未输入数据"], ["123", "123", "", "存在未输入数据"],
    ['1', '12345678910', '1234',"用户名长度不符合要求"], ['lyq', "123", "1234", "邮箱格式不正确"],
    ["lyq","12345678910@123.com","1234","邮箱格式不正确"]] )

    def test_forget(self,name,email,verification,body,getDriver):
        getDriver.get("http://localhost:8080/novel/forget.html")
        Name = getDriver.find_element(By.XPATH, '//*[@id="username"]')
        Email = getDriver.find_element(By.XPATH, '//*[@id="email"]')
        Ver = getDriver.find_element(By.XPATH, '//*[@id="code"]')

        Name.send_keys(name)
        Email.send_keys(email)
        Ver.send_keys(verification)
        time.sleep(1)
        submit = getDriver.find_element(By.XPATH, '//*[@id="submit"]')
        submit.click()
        alert = WebDriverWait(getDriver, timeout=10).until(expected_conditions.alert_is_present())
        time.sleep(2)
        text = alert.text
        alert.accept()
        assert text == body

 2、手工测试后面的数据

 修改密码页面

1、前置要求:忘记页面页面校验成功(5分钟的session)

2、邮箱发送信息包含验证码(5分钟过期,响应头的Email中,存储了验证码数据)

进行接口测试

用户忘记密码页面登陆成功,才可以来到修改密码页面

 UI测试

1、检测数据

import time
import uuid

from selenium import  webdriver

import pytest
from selenium.webdriver.common.by import By
from selenium.webdriver.support import wait, expected_conditions
import requests
from selenium.webdriver.support.wait import WebDriverWait

class TestForget():
    @pytest.mark.parametrize(('email,password,surepassword,body'),
    [["","123","123","存在未输入数据"],
     ["1123", "", "123", "存在未输入数据"],
     ["123", "123", "", "存在未输入数据"],
     ["123", "123", "1231", "两次密码不匹配"],
    ['123', '123', '123',"密码长度不足"]
    ])

    def test_forget(self,email,password,surepassword,body,getDriver):
        getDriver.get("http://localhost:8080/novel/change.html")
        alert = WebDriverWait(getDriver, timeout=10).until(expected_conditions.alert_is_present())
        alert.accept()
        time.sleep(3)
        #进入页面 因为此时没有发送邮件 所以弹窗内容是”邮件未发送“
        Password = getDriver.find_element(By.XPATH, '//*[@id="password"]')
        Email = getDriver.find_element(By.XPATH, '//*[@id="email"]')
        SurePassword = getDriver.find_element(By.XPATH, '//*[@id="password_again"]')
        Email.send_keys(email)
        Password.send_keys(password)
        SurePassword.send_keys(surepassword)
        time.sleep(3)
        submit = getDriver.find_element(By.XPATH, '//*[@id="submit"]')
        submit.click()
        alert = WebDriverWait(getDriver, timeout=10).until(expected_conditions.alert_is_present())
        time.sleep(2)
        text = alert.text
        print(alert.text)
        alert.accept()
        assert text == body

 2、手工测试

主页页面测试

  1、点击分类表格,检测跳转页面的分类信息和页面标题,是不是和所点击分类相对应

import time
from telnetlib import EC

import pytest
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC, wait


#点击主页的分类表格,检测跳转页面的数据是不是为同一个分类的书籍
def test_demo(getDriver):
    getDriver.get("http://localhost:8080/novel/homepage.html")
    current=getDriver.current_window_handle
    #表格的分类数据的xpath
    # //*[@id="table"]/tbody/tr[1]/td[1]/a   #//*[@id="table"]/tbody/tr[1]/td[2]/a
    #//*[@id="table"]/tbody/tr[2]/td[1]/a
    classifys = getDriver.find_elements(By.XPATH,'//*[@id="table"]/tbody/tr/td/a')
    opened=[]
    opened.append(current)
    for classify in classifys:
        value = classify.text
        print(value)
        time.sleep(3)
        classify.click()
        for page in getDriver.window_handles:
            if page not in opened:
                getDriver.switch_to.window(page)
                opened.append(page)
        # 等待页面加载到元素出现
        WebDriverWait(getDriver, timeout=10).until(
            lambda d: d.find_element(By.XPATH, '/html/body/span[4]/span[2]/span/p'))
        # 1、检测页面的title是否正确
        assert getDriver.title == value + "书籍"
        # 2、检测推荐书籍页面的页面标签 是不是同样的分类书籍
        # / html / body / span[2] / span[1] / div[2] / div[1] / a[1]
        # / html / body / span[2] / span[1] / div[3] / div[1] / a[1]
        # / html / body / span[2] / span[1] / div[4] / div[1] / a[1]
        # 获取到上述所有元素
        values = getDriver.find_elements(By.XPATH, '/html/body/span[2]/span[1]/div/div[1]/a[1]')
        for val in values:
            assert val.text == value

        # 3、书籍介绍分类处
        assert getDriver.find_element(By.XPATH, '/html/body/span[3]').text == value + "书籍"
        # 4、榜一的数据分类
        try:
            ele = getDriver.find_element(By.XPATH, '/html/body/span[4]/span[2]/span/span[1]/span[1]/span/span[1]/a')
            assert ele.text == value
        except:  # 捕捉到了异常
            pass
        getDriver.switch_to.window(current)


2、本周推荐的分类检测

import time
from telnetlib import EC

import pytest
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC, wait


#本周推荐的分类测试
def test_demo(getDriver):
    getDriver.get("http://localhost:8080/novel/homepage.html")
    current=getDriver.current_window_handle
    #/html/body/span[3]/span[1]/div[2]/span/a[1]
    #/html/body/span[3]/span[1]/div[3]/span/a[1]
    classifys = getDriver.find_elements(By.XPATH,'/html/body/span[3]/span[1]/div/span/a[1]')
    opened=[]
    opened.append(current)
    for classify in classifys:
        value = classify.text
        print(value)
        classify.click()
        for page in getDriver.window_handles:
            if page not in opened:
                getDriver.switch_to.window(page)
                opened.append(page)
        # 等待页面加载到元素出现
        WebDriverWait(getDriver, timeout=10).until(
            lambda d: d.find_element(By.XPATH, '/html/body/span[4]/span[2]/span/p'))
        # 1、检测页面的title是否正确
        assert getDriver.title == value + "书籍"
        # 2、检测推荐书籍页面的页面标签 是不是同样的分类书籍
        # / html / body / span[2] / span[1] / div[2] / div[1] / a[1]
        # / html / body / span[2] / span[1] / div[3] / div[1] / a[1]
        # / html / body / span[2] / span[1] / div[4] / div[1] / a[1]
        # 获取到上述所有元素
        values = getDriver.find_elements(By.XPATH, '/html/body/span[2]/span[1]/div/div[1]/a[1]')
        for val in values:
            assert val.text == value

        # 3、书籍介绍分类处
        assert getDriver.find_element(By.XPATH, '/html/body/span[3]').text == value + "书籍"
        # 4、榜一的数据分类
        try:
            ele = getDriver.find_element(By.XPATH, '/html/body/span[4]/span[2]/span/span[1]/span[1]/span/span[1]/a')
            assert ele.text == value
        except:  # 捕捉到了异常
            pass
        getDriver.switch_to.window(current)


3、本周推测的书籍点击(检测页面跳转的书籍信息是否和数据库匹配)

import time
from telnetlib import EC

import pytest
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC, wait

#本周推荐的分类测试
def test_demo(getDriver,getconnect):
    getDriver.get("http://localhost:8080/novel/homepage.html")
    current=getDriver.current_window_handle
    #/html/body/span[3]/span[1]/div[2]/span/a[2]
    # #/html/body/span[3]/span[1]/div[3]/span/a[2]
    classifys = getDriver.find_elements(By.XPATH,'/html/body/span[3]/span[1]/div/span/a[2]')
    opened=[]
    opened.append(current)
    for classify in classifys:
        value = classify.text
        classify.click()
        for page in getDriver.window_handles:
            if page not in opened:
                getDriver.switch_to.window(page)
                opened.append(page)

        # 等待页面加载到元素出现
        WebDriverWait(getDriver, timeout=10).until(lambda d: d.find_element(By.XPATH, '//*[@id="textarea"]'))
        # 1、检测页面的title是否正确
        assert getDriver.title == value
        #2、检测页面书籍名称
        assert getDriver.find_element(By.XPATH,'/html/body/span[1]/span[2]/span[1]/span').text==value
        #3、检测书籍信息和数据库是否匹配
        #创建游标对象
        cur=getconnect.cursor()
        sql="select * from book where book_name=('%s')"%(value)
        cur.execute(sql)
        result=cur.fetchone()

       #验证作者信息
        assert result[1]+" 著"==getDriver.find_element(By.XPATH,'//*[@id="writername"]').text
       #验证书名
        assert result[3]==value
        #验证分类
        assert result[4]==getDriver.find_element(By.XPATH,'//*[@id="style"]').text
        #验证状态
        assert result[8]==getDriver.find_element(By.XPATH,'//*[@id="state"]').text

        getDriver.switch_to.window(current)

分类页面测试

进行接口测试

将分类查找的书籍,和数据库数据相比对

检测type不是total,sex,state时的返回结果

import pytest
import requests
import yaml
from selenium.webdriver.chrome import webdriver
from selenium.webdriver.common.by import By

import common.yaml
import debug_talk
from classify.package import Unifiedrequest
@pytest.mark.parametrize('values,sql', [('count=3&type=total', 'select * from book limit 3'),('type=total&state="完结"', 'none'),
    ('type=total&count=3', 'select * from book limit 3'),   ('type=total&count=-1', 'none'),('type=total&count=0', 'none'),('type=total&count=null', 'none'),
    (('type=null&count=null', 'none')),('type="null"&count=-1', 'none'),(('type=null&state="完结"', 'none')),('type="null"&classify_name="玄幻"', 'none'),
    (('type="classify"&count=null', 'none')), ('type="classify"&classify_name="null"', 'none'),(('type="classify"&state="完结"', 'none')), ('type="classify"&classify_name="玄幻 &count=3"', 'select * from book where classify_name="玄幻" limit 3'),
    (('type="state"&count=null', 'none')) ,   ('type="state"&sex="全部"', 'none'),('type="state"&count=-1', 'none'),(('type="state"&state="全部"&count=10', 'select * from book where state="全部" limit 10')),
    (('type="sex"&count=null', 'none')), ('type="sex"&state=null', 'none'),('type="sex"&sex=null', 'none'), (('type="sex"&sex="全部"&count=10', 'select * from book where sex="全部" limit 10')),
    (('type="ttgjj"&sex="全部"&count=10', 'none')),((('type="sex"&sex="hhh"&count=10', 'none')),)
                                        ])
def test_send(values, sql, getconnect):
    res = requests.session().get(url='http://127.0.0.1:8080/novel/getshowbooks', params=values)
    try:
        results = res.json()
        cur = getconnect.cursor()
        count = cur.execute(sql)
        books = cur.fetchall()
        i = 0
        for book in books:
            i += 1
            falg = False
            for result in results:
                if (int)(book[0]) == result['book_id'] and \
                        book[1] == result['writer_name'] and \
                        book[2] == result['photo'] and \
                        book[3] == result['book_name'] and \
                        book[4] == result["classify_name"] and \
                        book[5] == result['book_brief']:
                    falg = True
                    break
            assert falg == True
        assert i == count
    except:
        assert sql=='none'

查询页面测试

import time
from telnetlib import EC

import pytest
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC, wait

@pytest.mark.parametrize('value,method',[
    ('余华','author'),  ('东野圭吾','author'),('曹雪芹','author'),
    ('红楼梦','book'),('三国演义','book'),('白夜行','book'),('三国演义','book'),
    (' ','author')
]
)
#搜索功能的展示
def test_demo(value,method,getDriver,getconnect):
    getDriver.get('http://localhost:8080/novel/search.html')
    getDriver.find_element(By.XPATH, '//*[@id="search"]').clear()
    getDriver.find_element(By.XPATH, '//*[@id="search"]').send_keys(value)
    getDriver.find_element(By.XPATH, '//*[@id="searchbutton"]').click()
    time.sleep(1)
    cursion = getconnect.cursor()

    if (method == 'author'):
        sql = "select  book. * from book where writer_name like concat('%s')" % (value)
        booksname = []  # 书名称
        rowcount = (cursion.execute(sql))  # 执行sql语句
        writers = cursion.fetchall()
        print(writers)
        # 搜索数量的展示
        books = getDriver.find_elements(By.XPATH, '/html/body/span[2]/span')
        assert rowcount == len(books)
        #书籍名称
        #/html/body/span[2]/span[1]/span[2]/span[1]/a
        #/html/body/span[2]/span[2]/span[2]/span[1]/a

        web_books = getDriver.find_elements(By.XPATH, '/html/body/span[2]/span/span[2]/span[1]/a')
        for book in web_books:
            booksname.append(book.text)

        for writer in writers:
            book_id = writer[2]
            # 获取book_id
            sql_book = "select * from book where book_id=('%s')" % (book_id)
            cursion.execute(sql_book)
            result = cursion.fetchone()
            assert result[3] in booksname

    if (method == 'book'):
        sql = "select  book. * from book where book_name like concat('%s')" % (value)
        rowcount = (cursion.execute(sql))  # 执行sql语句
        values = []
        # 搜索数量的展示
        # / html / body / span[2] / span[2] / span[2] / span[1] / a
        # / html / body / span[2] / span[1] / span[2] / span[1] / a
        books = getDriver.find_elements(By.XPATH, '/html/body/span[2]/span')
        assert rowcount == len(books)
        # 数据库查找结果
        rowcount = (cursion.execute(sql))  # 执行sql语句
        results = cursion.fetchall()
        print(results)
        # 前端展示的书籍名称
        web_books = getDriver.find_elements(By.XPATH, '/html/body/span[2]/span/span[2]/span[1]/a')
        for name in web_books:
            values.append(name.text)

        flag = False
        for val in values:
           for i in range(0,rowcount):
               if(val==results[i][3]):
                   flag = True

        assert flag == True


作者页面测试

查询展示的作者书籍总数,书籍信息介绍是否和数据库匹配

import time
from telnetlib import EC

import pytest
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC, wait



def test_demo(getDriver, getconnect):
    cursion = getconnect.cursor()
    sql = 'select * from book'
    rowcount = cursion.execute(sql)  # 执行sql语句
    for i in range(1,rowcount):
     try:
        getDriver.get("http://localhost:8080/novel/novel.html?book_id=" + str(i))
        current = getDriver.current_window_handle
        WebDriverWait(getDriver, timeout=10).until(lambda d: d.find_element(By.XPATH, '//*[@id="textarea"]'))
        value = getDriver.find_element(By.XPATH, '//*[@id="writername"]').text
        value = value.split(' ')[0]
        print(value)
        getDriver.find_element(By.XPATH, '//*[@id="writername"]').click()
        # 等待页面加载到元素出现
        for page in getDriver.window_handles:
            if page != current:
                getDriver.switch_to.window(page)

        WebDriverWait(getDriver, timeout=10).until(
            lambda d: d.find_element(By.XPATH, '/html/body/span[3]/span[1]/span[2]'))
        # 1、检测页面的title是否正确
        assert getDriver.title == value
        # 2、连接数据库
        cursion = getconnect.cursor()
        sql = 'select * from writer where writer_name=("%s")' % (value)
        rowcount = (str)(cursion.execute(sql))  # 执行sql语句
        assert "作品总数 " + rowcount == getDriver.find_element(By.XPATH, '/html/body/span[1]/span/span[2]').text
        writers = cursion.fetchall()
        # 书的名称 /html/body/span[3]/span[1]/span[2]/span[1]/a
        #          /html/body/span[3]/span[2]/span[2]/span[1]/a

        web_books = getDriver.find_elements(By.XPATH, '/html/body/span[3]/span/span[2]/span[1]/a')
        print(web_books)
        books = []  # 书名称
        for book in web_books:
            books.append(book.text)

        for writer in writers:
            book_id = writer[2]  # 获取book_id
            sql_book = "select * from book where book_id=('%s')" % (book_id)
            cursion.execute(sql_book)
            result = cursion.fetchone()
            assert result[3] in books

     except:
        raise NameError("打开网址错误", "http://localhost:8080/novel/novel.html?book_id=" + str(i))

阅读小说页面测试

1、查看各个页面的阅读小说按钮是否正确跳转

2、在用户未登录时,不会保留用户的阅读记录

3、如果用户登录,会保留阅读记录(直接阅读,会来到上一次阅读的章节)

4、阅读的几种方式:直接点击阅读按钮,点击目录阅读,点击上下一页阅读

5、小说第一章,不会出现上一页按钮。小说最后一章,不会出现下一页按钮

书架页面测试

Bug

1、登录页面、注册页面、修改密码页面,输入过长的密码时,可视组件被遮挡

2、各个页面在窗口缩放时,页面文字,组件会产生堆积

3、在注册页面,输入超过17位长度的邮箱数据,响应是500

(已解决,应该先限制邮箱长度==17,造成了下标越界)

4、搜索框不支持enter键确认

 5、在小说阅读页面,点击阅读按钮,会出现文章内容加载不成功的现象,但是重新刷新以下,就会加载成功

 6、在前端没有处理好不存在的数据(每一个页面都会出现此类情况)

1、小说介绍页面,当数据不存在时,应该显示404

 2、在小说阅读界面

 如果手动将数据更改,就会导致错误,比如将书名更改

 将book_id改为-1,应该返回页面是404

 3、在分类页面

 7、页面会出现排版左移的情况,比如

gitee链接:

登录 - Gitee.com

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

k8s-资源限制-探针检查

文章目录一、资源限制1、资源限制的使用2、reuqest资源(请求)和limit资源(约束)3、Pod和容器的资源请求和限制4、官方文档示例5、资源限制实操5.1 编写yaml资源配置清单5.2 释放内存(node节点,以node01为例…

计算机网络题库---错题本

(一)老生常谈 第一章: 1.什么是计算机网络?其主要功能是什么? 解答: 利用通信设备和线路,将分布在地理位置不同的、功能独立的多个计算机系统连接起来,以功能完善的网络软件实现网…

ChatGPT 开发人员教程 - 38种提高工作效率10倍的方法

未来的时代,又将是一个“洋枪洋炮”对“大刀长矛”的时代。在过去的十年里,传统行业在和经过IT改造的行业竞争时,无一例外地败北。08年金融危机前,全世界市值前十的公司,只有微软一家是IT企业。仅仅过去了十年&#xf…

文献阅读:Training language models to follow instructions with human feedback

文献阅读:Training language models to follow instructions with human feedback 1. 文献工作简介2. 模型优化设计3. 实验结果4. 总结 & 思考 文献链接:https://arxiv.org/abs/2203.02155 1. 文献工作简介 这篇文章是OpenAI在上年提出的一篇对于…

Go项目(商品微服务-1)

文章目录简介建表protohandler商品小结简介 商品微服务主要在于表的设计,建哪些表?表之间的关系是怎样的? 主要代码就是 CURD表和字段的设计是一个比较有挑战性的工作,比较难说清楚,也需要经验的积累,这里…

【Linux】工具(2)——vim

本期博客我们进入到Linux环境下vim工具的学习:一、vim是什么📌Vim是一个超级超级强大的文本编辑器。Vim及前身VI,历史悠久(可能比多数读者的年龄更大),经历了几十年的考验和发展。Vim全称叫Vi IMproved. 而…

Linux安装云原生网关Kong/KongA

目录1 概述2 创建服务器3 安装postgres4 安装kong5 安装node6 安装KONGA1 概述 Kong Kong是一款基于OpenResty(NginxLua模块)编写的高可用、易扩展的开源API网关,专为云原生和云混合架构而建,并针对微服务和分布式架构进行了特别…

蓝桥杯算法模板

模拟散列表拉链法import java.io.*; import java.util.*; public class a1 {static int n;static int N100003;static int[] hnew int[N];static int[] enew int[N];static int[] nenew int[N]; static int idx; static void insert(int x){int k(x%NN)%N;e[idx]x;ne[idx]h[k];…

终端软件架构说

目录 零:前言 一,基于服务的架构 二,基于多进程多线程的架构 三,以数据为中心的架构 四,类Android的分层架构设计 五,总结 零:前言 谈到架构,可能大家的第一感觉是信息系统的…

2023年三月份图形化三级打卡试题

活动时间 从2023年3月1日至3月21日,每天一道编程题。 本次打卡的规则如下: 小朋友每天利用10~15分钟做一道编程题,遇到问题就来群内讨论,我来给大家答疑。 小朋友做完题目后,截图到朋友圈打卡并把打卡的截图发到活动群…

Vue 3第三章:模板语法及指令介绍

文章目录1. 插值表达式1.1. 声明变量可直接在模板中使用,采用{{变量名称}}的方式1.2. 模板语法支持三元表达式1.3. 模板语法支持运算1.4. 模板语法支持方法调用2. 指令2.1. v-bind:用于绑定属性或动态绑定对象的值到元素上。2.2. v-if、v-else-if、v-els…

C#学习记录——接口的实现

一小部分知识精英依旧直面核心困难,努力地进行深度钻研,生产内容;而大多数信息受众始终在享受轻度学习,消费内容。如果我们真的希望在时代潮流中占据一席之地,那就应该尽早抛弃轻松学习的幻想,锤炼深度学习…

Burp Suite 常用模块简介

Burp Suite 常用模块分为 目标站点(target)模块 代理(proxy)模块 攻击(Intruder)模块 重放(Repeater) 模块 Target模块是对站点资源的收集,与站点各资源包发出和相应包的记录 Proxy模块是核心模块,可以拦截数据包发送往浏览器,进行修改后再…

网络协议分析(2)判断两个ip数据包是不是同一个数据包分片

一个节点收到两个IP包的首部如下:(1)45 00 05 dc 18 56 20 00 40 01 bb 12 c0 a8 00 01 c0 a8 00 67(2)45 00 00 15 18 56 00 b9 49 01 e0 20 c0 a8 00 01 c0 a8 00 67分析并判断这两个IP包是不是同一个数据报的分片&a…

Android JetPack之启动优化StartUp初始化组件的详解和使用

一、背景 先看一下Android系统架构图 在Android设备中,设备先通电(PowerManager),然后加载内核层,内核走完,开始检查硬件,以及为硬件提供的公开接口,然后进入到库的加载。库挂载后开…

Winform控件开发(16)——Timer(史上最全)

前言: Timer控件的作用是按用户定义的时间间隔引发事件的计时器,说的直白点就是,他就像一个定时炸弹一样到了一定时间就爆炸一次,区别在于定时炸弹炸完了就不会再次爆炸了,但是Timer这个计时器到了下一个固定时间还会触发一次,上面那张图片就是一个典型的计时器,该定时器…

【Java】Spring Boot 配置文件

文章目录SpringBoot 配置文件1. 配置文件的作用2. 配置文件的格式3. properties配置文件说明3.1 properties基本语法3.2 读取配置文件3.3 properties缺点分析4. yml配置文件说明4.1 yml基本语法4.2 yml使用进阶4.2.1 yml配置不同的数据类型及null4.2.1 yml配置的读取4.2.2 配置…

Python蓝桥杯训练:基本数据结构 [哈希表]

Python蓝桥杯训练:基本数据结构 [哈希表] 文章目录Python蓝桥杯训练:基本数据结构 [哈希表]一、哈希表理论基础知识1、开放寻址法2、链式法二、有关哈希表的一些常见操作三、力扣上面一些有关哈希表的题目练习1、[有效的字母异位词](https://leetcode.cn…

0101基础概念-图-数据结构和算法(Java)

文章目录1 图1.1 定义1.2 4种图模型2 无向图2.1 定义2.2 术语后记1 图 1.1 定义 图是一种非线性的数据结构,表示多对多的关系。 图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V, E)&#xf…

ecology9-谷歌浏览器下-pdf.js在渲染时部分发票丢失文字 问题定位及解决

问题 问题描述 : 在谷歌浏览器下,pdf.js在渲染时部分发票丢失文字;360浏览器兼容模式不存在此问题 排查思路:1、对比谷歌浏览器的css样式和360浏览器兼容模式下的样式,没有发现关键差别 2、✔使用Fiddler修改网页js D…