<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>Engineering - 分类 - 一峰的记录</title>
        <link>https://www.simplife.tech/categories/engineering/</link>
        <description>Engineering - 分类 - 一峰的记录</description>
        <generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Sun, 15 Jun 2025 14:28:32 &#43;0800</lastBuildDate><atom:link href="https://www.simplife.tech/categories/engineering/" rel="self" type="application/rss+xml" /><item>
    <title>AB 实验测试实践</title>
    <link>https://www.simplife.tech/posts/ab-testing/</link>
    <pubDate>Sun, 15 Jun 2025 14:28:32 &#43;0800</pubDate>
    <author>一峰</author>
    <guid>https://www.simplife.tech/posts/ab-testing/</guid>
    <description><![CDATA[<h2 id="一背景">一、背景</h2>
<p>一年来，做了很多次有 AB 实验的需求了。AB 实验对产品的决策方向是非常重要的，这也给我们测试时候指明了重点。本文记录一下业务需求侧 AB 实验的测试要点。</p>]]></description>
</item>
<item>
    <title>微服务架构中的 Trace 原理</title>
    <link>https://www.simplife.tech/posts/microservice-trace-principles/</link>
    <pubDate>Tue, 07 Nov 2023 16:04:12 &#43;0800</pubDate>
    <author>一峰</author>
    <guid>https://www.simplife.tech/posts/microservice-trace-principles/</guid>
    <description><![CDATA[<h2 id="一背景">一、背景</h2>
<p>在单体架构时代，一个请求的所有逻辑都在同一个进程中执行，调试和排查问题相对简单：查看日志、打断点、分析堆栈，基本能定位到问题所在。</p>
<p>但在微服务架构下，一个用户请求可能会经过网关、认证服务、订单服务、支付服务、库存服务等多个服务。当请求失败或响应缓慢时，问题可能出现在链路中的任何一个环节：</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>
