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

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 将⾃动化测试补充⾄测试报告

测试报告模板:

相关推荐
Jackson@ML29 分钟前
如何快速高效学习Python?
开发语言·python
西瓜本瓜@2 小时前
在Android中如何使用Protobuf上传协议
android·java·开发语言·git·学习·android-studio
UFIT2 小时前
Python函数与模块笔记
开发语言·python
言之。2 小时前
别学了,打会王者吧
java·python·mysql·容器·spark·php·html5
机智的人猿泰山2 小时前
java kafka
java·开发语言·kafka
Y1nhl2 小时前
搜广推校招面经八十一
开发语言·人工智能·pytorch·深度学习·机器学习·推荐算法·搜索算法
Algorithm15762 小时前
谈谈接口和抽象类有什么区别?
java·开发语言
YiSLWLL3 小时前
使用Tauri 2.3.1+Leptos 0.7.8开发桌面小程序汇总
python·rust·sqlite·matplotlib·visual studio code
yu4106213 小时前
Rust 语言使用场景分析
开发语言·后端·rust
良艺呐^O^3 小时前
uniapp实现app自动更新
开发语言·javascript·uni-app