【软件测试】:软件测试实战

1. ⾃动化实施步骤

1.1 编写web测试⽤例

1.2 ⾃动化测试脚本开发

common

cpp 复制代码
public class AutotestUtils {
    public static EdgeDriver driver;
    //
创建驱动对象
 
    public static EdgeDriver createDriver(){
        //
驱动对象已经创建好了
/
没有创建
 
        if( driver == null){
            driver = new EdgeDriver();
            //
创建隐式等待
 
            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
        }
        return driver;
    }
    public AutotestUtils(String url){
        EdgeDriver driver = createDriver();
        driver.get(url);
    }
    public List<String> getTime(){
        //
⽂件能不能按照天的维度按⽂件夹进⾏保存
 
        //
⽂件格式
 20230212-123030
毫秒
 
        SimpleDateFormat sim1 = new SimpleDateFormat("yyyyMMdd-HHmmssSS");
        SimpleDateFormat sim2 = new SimpleDateFormat("yyyyMMdd");
        String filename = sim1.format(System.currentTimeMillis());
        String dirname = sim2.format(System.currentTimeMillis());
        List<String> list = new ArrayList<>();
        list.add(dirname);
        list.add(filename);
        return  list;
    }
    /**
     * 
获取屏幕截图,把所有的⽤例执⾏的结果保存下来
 
     */
    public void getScreenShot(String str) throws IOException {
        List<String> list = getTime();
        //dir+filename
        // ./
指的是当前的项⽬路径下,也就是
BlogAutoTest
下
 
        // ./src/test/java/com/blogWebAutoTest/dirname/filename
        // ./src/test/java/com/blogWebAutoTest/20230212/logintest_20230212
123030
毫秒
.png 
        String filename = 
"./src/test/java/com/blogWebAutoTest/"+list.get(0)+"/"+str+"_"+list.get(1)+".pn
 g";
        File srcfile = driver.getScreenshotAs(OutputType.FILE);
        //
把屏幕截图⽣成的⽂件放到指定的路径
 
        FileUtils.copyFile(srcfile,new File(filename));
        }
 }
 

cases/BlogLogin.py

cpp 复制代码
import time
from selenium.webdriver.common.by import By
from common.Utils import BlogDriver
class BlogLogin:
 url = ""
 driver = ""
 def __init__(self): self.url = "http://192.168.47.135:8653/blog_system/blog_login.html" self.driver = BlogDriver.driver self.driver.get(self.url) def loginSucTest(self): time.sleep(2) self.driver.find_element(By.CSS_SELECTOR, "#username").clear() self.driver.find_element(By.CSS_SELECTOR, "#password").clear() self.driver.find_element(By.CSS_SELECTOR, 
"#username").send_keys("admin")
 self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123") self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
 # 对登录结果进⾏检测, 如果跳转到了博客列表⻚才算是登录成功了
 self.driver.find_element(By.CSS_SELECTOR, "body > div.container > 
div.left > div > img")
 BlogDriver.getScreenShot() self.driver.back()
 def loginFailTest(self): self.driver.find_element(By.CSS_SELECTOR, "#username").clear() self.driver.find_element(By.CSS_SELECTOR, "#password").clear() self.driver.find_element(By.CSS_SELECTOR, 
"#username").send_keys("admin")
 self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("111") self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
 # 等登录失败的结果进⾏检测, 不能仅仅通过body来校验结果,因为登录成功的结果⻚也有
body元素
 expect = "⽤⼾名或密码错误!"
 actual = self.driver.find_element(By.CSS_SELECTOR, "body").text print(actual)
 BlogDriver.getScreenShot() assert expect == actual self.driver.back()

cases/BlogList.py

cpp 复制代码
from selenium.webdriver.common.by import By
from common.Utils import BlogDriverclass BlogList:
 url = ""
 driver = ""
 def __init__(self): self.driver = BlogDriver.driver self.url = "http://192.168.47.135:8653/blog_system/blog_list.html"
 self.driver.get(self.url)
 # 前提:登陆状态下才能进⼊到列表⻚ def ListTest(self):
 self.driver.find_element(By.CSS_SELECTOR, "body > div.container > 
div.left > div > img")
 self.driver.find_element(By.CSS_SELECTOR, "body > div.container > 
div.right > div:nth-child(1) > a")
 articles = self.driver.find_elements(By.CSS_SELECTOR, "body > 
div.container > div.right > div")
 assert len(articles) > 10
 #点击⽂章
 self.driver.find_element(By.CSS_SELECTOR,"body > div.container > 
div.right > div:nth-child(1) > a").click()
 title = self.driver.title
 assert title == "博客详情⻚" BlogDriver.getScreenShot()

cases/BlogDetail.py

cpp 复制代码
from selenium.webdriver.common.by import By
from common.Utils import BlogDriverclass BlogDetail:
 url = " "
 driver = ""
 def __init__(self): self.url = "http://192.168.47.135:8653/blog_system/blog_detail.html?
blogId=15"
 self.driver = BlogDriver.driver title = self.driver.title
 #列表⻚已经跳过来了,⽆需再指定url跳转
 if not title=="博客列表⻚":
 self.driver.get(self.url) def DetailCheck(self):
 #body > div.container > div.right > div:nth-child(1) > a BlogDriver.getScreenShot() self.driver.find_element(By.CSS_SELECTOR,"body > div.container > 
div.right > div > h3")
 self.driver.find_element(By.CSS_SELECTOR,"body > div.container > 
div.right > div > div.date")
 self.driver.find_element(By.CSS_SELECTOR,"#content")

cases/RunCases.py

cpp 复制代码
from common.Utils import BlogDriverfrom tests import BlogLoginfrom tests import BlogListfrom tests import BlogDetailif __name__ == "__main__":
 BlogLogin.BlogLogin().loginSucTest() BlogList.BlogList().ListTest() BlogDetail.BlogDetail().DetailCheck() BlogDriver.driver.quit()

1.3 将⾃动化测试补充⾄测试报告

测试报告模板:

相关推荐
小龙报17 小时前
算法通关指南:数据结构和算法篇 --- 队列相关算法题》--- 1. 【模板】队列,2. 机器翻译
c语言·开发语言·数据结构·c++·算法·学习方法·visual studio
晚秋大魔王17 小时前
基于python的jlink单片机自动化批量烧录工具
前端·python·单片机
胖哥真不错17 小时前
Python基于PyTorch实现多输入多输出进行CNN卷积神经网络回归预测项目实战
pytorch·python·毕业设计·课程设计·毕设·多输入多输出·cnn卷积神经网络回归预测
木木em哈哈17 小时前
有关于cnb自动化的脚本补全
服务器·开发语言·pygame
星释18 小时前
Rust 练习册 :Poker与扑克牌游戏
开发语言·游戏·rust
程序员-小李18 小时前
基于PyTorch的动物识别模型训练与应用实战
人工智能·pytorch·python
晨非辰18 小时前
【数据结构初阶】--从排序算法原理分析到代码实现操作,参透插入排序的奥秘!
c语言·开发语言·数据结构·c++·算法·面试·排序算法
Jonathan Star18 小时前
Next.js、NestJS、Nuxt.js 是 **Node.js 生态中针对不同场景的框架**
开发语言·javascript·node.js
zhangyao94033021 小时前
关于js导入Excel时,Excel的(年/月/日)日期是五位数字的问题。以及对Excel日期存在的错误的分析和处理。
开发语言·javascript·excel
闲人编程21 小时前
Python在网络安全中的应用:编写一个简单的端口扫描器
网络·python·web安全·硬件·端口·codecapsule·扫描器