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

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

测试报告模板:

相关推荐
Soneswy2 分钟前
C++基础篇——类与对象(中)
开发语言·c++
CoderYanger4 分钟前
Java EE 进阶:5. Spring IoC&DI(第二弹):Spring IoC
java·开发语言·spring boot·spring·面试·职场和发展·java-ee
大侠在此在在此19 分钟前
我花了不到1块钱,用python把自己一年的1500次会话做成了个人知识库
python·llm
Jino25 分钟前
900×2100 的门洞,展开面积却是 3.4 ㎡ —— 不锈钢核价引擎的七条口径
python
贝壳69028 分钟前
Python 布尔数组选型:list、numpy.bool_、bitarray、RoaringBitmap、bool-hybrid-array 各管一段
python
一只爱撸猫的程序猿41 分钟前
全球出货第二,却不在 AI 的默认推荐里:一份悖论解剖报告
人工智能·python·产品
青峰讲运维42 分钟前
OpenStack Heat 编排:用模板一键交付云业务,告别手动点页面
开发语言·php·openstack
piaoyiren1 小时前
Python FTP 服务端项目详细功能文档
网络·数据库·python
miofly1 小时前
GitHub 今日推荐|Edge0:让大号 MoE 模型在一台 Mac 上流式跑起来
python·开源·github
MyFreeIT1 小时前
Python Windows Manual
开发语言·python