<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>自动化测试 - 标签 - 一峰的记录</title>
        <link>https://www.simplife.tech/tags/%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/</link>
        <description>自动化测试 - 标签 - 一峰的记录</description>
        <generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Tue, 12 Oct 2021 14:28:21 &#43;0800</lastBuildDate><atom:link href="https://www.simplife.tech/tags/%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/" rel="self" type="application/rss+xml" /><item>
    <title>Finetest: 一个 Web 自动化测试框架的技术实现</title>
    <link>https://www.simplife.tech/posts/finetest-%E4%B8%80%E4%B8%AA-web-%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E6%A1%86%E6%9E%B6%E7%9A%84%E6%8A%80%E6%9C%AF%E5%AE%9E%E7%8E%B0/</link>
    <pubDate>Tue, 12 Oct 2021 14:28:21 &#43;0800</pubDate>
    <author>一峰</author>
    <guid>https://www.simplife.tech/posts/finetest-%E4%B8%80%E4%B8%AA-web-%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E6%A1%86%E6%9E%B6%E7%9A%84%E6%8A%80%E6%9C%AF%E5%AE%9E%E7%8E%B0/</guid>
    <description><![CDATA[<h2 id="项目简介">项目简介</h2>
<p>Finetest 是一个基于 Python + Selenium + pytest 的 Web 自动化测试框架，框架集成了智能元素定位、可视化回归测试、用例录制回放、文件对比等功能，旨在降低 UI 自动化测试的门槛，降低维护成本，提高测试效率。</p>]]></description>
</item>
<item>
    <title>录制浏览器请求生成 RobotFramework 代码</title>
    <link>https://www.simplife.tech/posts/xhr-recorder-robotframework/</link>
    <pubDate>Sun, 12 Sep 2021 12:00:22 &#43;0800</pubDate>
    <author>一峰</author>
    <guid>https://www.simplife.tech/posts/xhr-recorder-robotframework/</guid>
    <description><![CDATA[<p>我们组的自动化测试用的是RobotFramework。在编写自动化测试时，大部分工作集中于一个页面，页面上有若干报表，我们需要使用特定数据源创建特定报表，然后抓取报表数据网络请求的request和response，手动写入RobotFramework中。</p>]]></description>
</item>
<item>
    <title>用 Robot Framework 控制 Canvas 元素实践</title>
    <link>https://www.simplife.tech/posts/canvas-automation-robot-framework-testing/</link>
    <pubDate>Tue, 09 Mar 2021 21:54:45 &#43;0800</pubDate>
    <author>一峰</author>
    <guid>https://www.simplife.tech/posts/canvas-automation-robot-framework-testing/</guid>
    <description><![CDATA[<h2 id="背景">背景</h2>
<p>在自动化测试中，我遇到了一个问题：<strong>如何测试 Canvas 图表元素？</strong></p>
<p>与常规 HTML 元素不同，Canvas 是作为一个整体区域对外暴露为一个大元素，内部的图表元素（如柱状图的柱子、地图的省份）不是独立的 DOM 元素，常规的 Selenium 点击方法无法定位到 Canvas 内部的特定位置。</p>]]></description>
</item>
<item>
    <title>UI 自动化测试中的链式调用设计</title>
    <link>https://www.simplife.tech/posts/chain-call-in-ui-automation/</link>
    <pubDate>Sun, 29 Nov 2020 12:32:37 &#43;0800</pubDate>
    <author>一峰</author>
    <guid>https://www.simplife.tech/posts/chain-call-in-ui-automation/</guid>
    <description><![CDATA[<h1 id="ui-自动化测试中的链式调用设计">UI 自动化测试中的链式调用设计</h1>
<h2 id="一问题">一、问题</h2>
<p>传统的 UI 自动化测试代码往往是这样写的：</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-python">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_login_and_create_report</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">    <span class="n">driver</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&#34;/login&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">driver</span><span class="o">.</span><span class="n">find_element</span><span class="p">(</span><span class="n">By</span><span class="o">.</span><span class="n">ID</span><span class="p">,</span> <span class="s2">&#34;username&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">send_keys</span><span class="p">(</span><span class="s2">&#34;admin&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">driver</span><span class="o">.</span><span class="n">find_element</span><span class="p">(</span><span class="n">By</span><span class="o">.</span><span class="n">ID</span><span class="p">,</span> <span class="s2">&#34;password&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">send_keys</span><span class="p">(</span><span class="s2">&#34;admin123&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">driver</span><span class="o">.</span><span class="n">find_element</span><span class="p">(</span><span class="n">By</span><span class="o">.</span><span class="n">ID</span><span class="p">,</span> <span class="s2">&#34;login-btn&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">driver</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&#34;/reports&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">driver</span><span class="o">.</span><span class="n">find_element</span><span class="p">(</span><span class="n">By</span><span class="o">.</span><span class="n">ID</span><span class="p">,</span> <span class="s2">&#34;new-report&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="n">driver</span><span class="o">.</span><span class="n">find_element</span><span class="p">(</span><span class="n">By</span><span class="o">.</span><span class="n">ID</span><span class="p">,</span> <span class="s2">&#34;report-name&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">send_keys</span><span class="p">(</span><span class="s2">&#34;测试报表&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">driver</span><span class="o">.</span><span class="n">find_element</span><span class="p">(</span><span class="n">By</span><span class="o">.</span><span class="n">ID</span><span class="p">,</span> <span class="s2">&#34;save-btn&#34;</span><span class="p">)</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">assert</span> <span class="s2">&#34;创建成功&#34;</span> <span class="ow">in</span> <span class="n">driver</span><span class="o">.</span><span class="n">page_source</span></span></span></code></pre></div></div>
<p>问题很明显：<strong>测试逻辑被一大堆底层操作淹没了</strong>，看不出主线流程。</p>]]></description>
</item>
<item>
    <title>UI 自动化测试的 POM 设计模式实践</title>
    <link>https://www.simplife.tech/posts/ui-automation-pom-design/</link>
    <pubDate>Fri, 27 Nov 2020 11:53:35 &#43;0800</pubDate>
    <author>一峰</author>
    <guid>https://www.simplife.tech/posts/ui-automation-pom-design/</guid>
    <description><![CDATA[<h1 id="ui-自动化测试的-pom-设计模式实践">UI 自动化测试的 POM 设计模式实践</h1>
<h2 id="一背景">一、背景</h2>
<p>在 UI 自动化测试中，持续维护测试脚本的成本很高。页面稍微一改动，大量的测试用例就有可能失败，需要人工修改适配。</p>
<p>因此，有人提出了POM（Page Object Model）设计模式。核心思维是将页面结构和测试逻辑分离，使测试代码更易于维护和扩展。</p>]]></description>
</item>
<item>
    <title>用 Pabot 给 Robot Framework 提速</title>
    <link>https://www.simplife.tech/posts/robotframework-pabot-parallel-execution/</link>
    <pubDate>Thu, 15 Oct 2020 21:54:39 &#43;0800</pubDate>
    <author>一峰</author>
    <guid>https://www.simplife.tech/posts/robotframework-pabot-parallel-execution/</guid>
    <description><![CDATA[<p>组里的自动化测试用例(接口用例)陆陆续续积累了三千多条，完整跑一遍已经需要将近<strong>3 个小时</strong>。</p>
<p>Robot Framework 默认是单线程顺序执行用例的，但我发现大家写得挺好，用例之间并没有依赖关系，完全可以并行执行。我发现了一个叫 <strong>Pabot</strong> 的东西，是专门用于并行执行 Robot Framework 的库。</p>]]></description>
</item>
</channel>
</rss>
