<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Emilyty</title>
  
  <subtitle>software testing</subtitle>
  <link href="https://emilyty.github.io/atom.xml" rel="self"/>
  
  <link href="https://emilyty.github.io/"/>
  <updated>2021-02-02T10:23:13.132Z</updated>
  <id>https://emilyty.github.io/</id>
  
  <author>
    <name>Emilyty</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>hexo+github新建文章和发布的方式</title>
    <link href="https://emilyty.github.io/2021/02/02/hexo-github%E6%96%B0%E5%BB%BA%E6%96%87%E7%AB%A0%E5%92%8C%E5%8F%91%E5%B8%83%E7%9A%84%E6%96%B9%E5%BC%8F/"/>
    <id>https://emilyty.github.io/2021/02/02/hexo-github%E6%96%B0%E5%BB%BA%E6%96%87%E7%AB%A0%E5%92%8C%E5%8F%91%E5%B8%83%E7%9A%84%E6%96%B9%E5%BC%8F/</id>
    <published>2021-02-02T10:11:40.000Z</published>
    <updated>2021-02-02T10:23:13.132Z</updated>
    
    <content type="html"><![CDATA[<p>window命令行进入hexo所在的目录C:\gitHubBlog\hexo</p><p>hexo s #启动hexo，通过<a href="http://localhost:4000/">http://localhost:4000/</a> 预览本地博客内容</p><img src="image-20210202181518663.png" alt="image-20210202181518663" style="zoom:50%;" /><p>hexo new “文章名称” #新建文章，文章所在目录C:\gitHubBlog\hexo\source_posts</p><img src="image-20210202181657781.png" alt="image-20210202181657781" style="zoom:50%;" /><p>hexo new page “新的页面” #新页面还不知道怎么用<br>hexo g #文章编辑完成后，发布前生成静态页面至public目录</p><img src="image-20210202181742192.png" alt="image-20210202181742192" style="zoom:50%;" /><p>hexo d #提交到github上，然后就可以通过gitHub上的<a href="https://emilyty.github.io/%E8%AE%BF%E9%97%AE%E5%9C%A8%E7%BA%BF%E5%8D%9A%E5%AE%A2">https://emilyty.github.io/访问在线博客</a></p><img src="image-20210202181921795.png" alt="image-20210202181921795" style="zoom:50%;" />]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;window命令行进入hexo所在的目录C:\gitHubBlog\hexo&lt;/p&gt;
&lt;p&gt;hexo s #启动hexo，通过&lt;a href=&quot;http://localhost:4000/&quot;&gt;http://localhost:4000/&lt;/a&gt; 预览本地博客内容&lt;/p&gt;
&lt;</summary>
      
    
    
    
    <category term="工具" scheme="https://emilyty.github.io/categories/%E5%B7%A5%E5%85%B7/"/>
    
    
    <category term="搭建GitHub博客" scheme="https://emilyty.github.io/tags/%E6%90%AD%E5%BB%BAGitHub%E5%8D%9A%E5%AE%A2/"/>
    
  </entry>
  
  <entry>
    <title>jmeter之time和timeShift函数</title>
    <link href="https://emilyty.github.io/2021/02/02/jmeter%E7%9A%84time%E5%92%8CtimeShift%E5%87%BD%E6%95%B0/"/>
    <id>https://emilyty.github.io/2021/02/02/jmeter%E7%9A%84time%E5%92%8CtimeShift%E5%87%BD%E6%95%B0/</id>
    <published>2021-02-02T06:09:06.000Z</published>
    <updated>2021-02-02T10:12:19.145Z</updated>
    
    <content type="html"><![CDATA[<p><font color=black size=5><strong>time函数</strong></font></p><hr><p>该函数可获取系统当前时间。默认的情况下获取的是当前时间戳。</p><p>该函数有两个参数可填。</p><div align=center>     <img src="time.jpg" alt="time" style="zoom:50%;" /></div><p>第一个参数是格式化当前时间，填写后返回对应格式的时间。</p><p>第二个函数是设置变量名称的函数，可以通过这个变量调用返回的值。</p><p>如图所示：</p><div align=center>     <img src="image-20210202153624813.png" alt="20210202153624813" style="zoom:50%;" /></div><font color=black size=5>**timeShift函数**</font><hr><p>该函数可以实现时间位移。该函数默认也是获取当前时间戳。</p><div align=center>     <img src="timeShift.jpg" alt="timeShift" style="zoom:50%;" /></div><p>第一个参数是格式化时间。填写后返回对应格式的时间，如果不填写返回时间戳。</p><p>我需要常用的格式：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">$&#123;__timeShift(yyyy&#x2F;MM&#x2F;dd HH:mm:ss:SSS,,,,)&#125;</span><br><span class="line">$&#123;__timeShift(yyyy&#x2F;MM&#x2F;dd HH:mm:ss,,,,)&#125;</span><br><span class="line">$&#123;__timeShift(yyyy-MM-dd&#39;T&#39;HH:mm:ss:SSS&#39;Z&#39;,,,,)&#125;</span><br><span class="line">$&#123;__timeShift(yyyy-MM-dd HH:mm:ss:SSS,,,,)&#125;</span><br><span class="line">$&#123;__timeShift(yyyy-MM-dd&#39;T&#39;HH:mm:ss:SSS+08:00,,,,)&#125;</span><br></pre></td></tr></table></figure><p>第二个参数，没发现什么用处。</p><p>第三个参数是时间位移。“-”表示减时间，“+”或者无符号表示加时间。大写“P”为固定前缀，【D,H,M,S】为时间单位。”D”为天，“H”为小时，“M”为分钟，“S”为秒。单位是【 H\M\S】的情况下必须使用”T”。例如,</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">减2个小时：&quot;-PT2H&quot;</span><br><span class="line">加2分钟：&quot;PT2M&quot;</span><br><span class="line">加2秒：&quot;PT2S&quot;</span><br><span class="line">加2天：”P2D“</span><br></pre></td></tr></table></figure><p>第四个参数，区域语言设置。</p><p>第五个参数，跟time的第二个函数同义。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;&lt;font color=black size=5&gt;&lt;strong&gt;time函数&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;该函数可获取系统当前时间。默认的情况下获取的是当前时间戳。&lt;/p&gt;
&lt;p&gt;该函数有两个参数可填。&lt;/p&gt;
&lt;div align=cente</summary>
      
    
    
    
    <category term="测试工具" scheme="https://emilyty.github.io/categories/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/"/>
    
    
    <category term="jmeter" scheme="https://emilyty.github.io/tags/jmeter/"/>
    
  </entry>
  
  <entry>
    <title>获取UTC时间、从json结构里通过筛选条件获取指定字段的value</title>
    <link href="https://emilyty.github.io/2020/11/17/python%E5%AD%A6%E4%B9%A0%E7%AC%AC%E4%B8%80%E5%A4%A9/"/>
    <id>https://emilyty.github.io/2020/11/17/python%E5%AD%A6%E4%B9%A0%E7%AC%AC%E4%B8%80%E5%A4%A9/</id>
    <published>2020-11-17T09:28:14.000Z</published>
    <updated>2020-11-17T11:06:05.575Z</updated>
    
    <content type="html"><![CDATA[<p>需要实现得需求：获取0时区（UTC）的时间；可以加减秒数；时间格式为 <code>yyyy-MM-dd’T’HH：mm：ss.SSS</code></p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> datetime</span><br><span class="line">now = datetime.datetime.utcnow()</span><br><span class="line">delta = datetime.timedelta(seconds=<span class="number">30</span>) <span class="comment">#加30秒</span></span><br><span class="line">n_seconds = now + delta</span><br><span class="line">start = n_seconds.isoformat() <span class="comment">#把时间格式化</span></span><br><span class="line">startTime = <span class="built_in">str</span>(start)[:<span class="number">-3</span>]+<span class="string">&#x27;Z&#x27;</span> <span class="comment">#去掉最后的三个字符，加上Z</span></span><br><span class="line"><span class="built_in">print</span> (startTime) <span class="comment">#2020-11-17T09:23:38.278Z</span></span><br></pre></td></tr></table></figure><p>从接口返回的数据中通过某一个字段找出其它字段的值，再该需求中知道name字段的值是多少，通过name字段找出其它key的value。name不重复。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> request</span><br><span class="line"><span class="keyword">import</span> json</span><br><span class="line"></span><br><span class="line">headers = &#123;<span class="string">&#x27;content-type&#x27;</span>: <span class="string">&#x27;application/json&#x27;</span>,<span class="string">&#x27;token&#x27;</span>:<span class="string">&#x27;test_token&#x27;</span>&#125;</span><br><span class="line">url = <span class="string">&#x27;http://test.com/test/index&#x27;</span></span><br><span class="line">rs = request.get(url,headers = headers)</span><br><span class="line">jsonTest = json.loads(rs.text)</span><br><span class="line"><span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">/例如，上面接口返回json结构如下：</span></span><br><span class="line"><span class="string">&#123;</span></span><br><span class="line"><span class="string">&#123;</span></span><br><span class="line"><span class="string">    &quot;total&quot;:10,</span></span><br><span class="line"><span class="string">    &quot;pageSize&quot;:100,</span></span><br><span class="line"><span class="string">    &quot;pageNum&quot;:1,</span></span><br><span class="line"><span class="string">    &quot;data&quot;:[</span></span><br><span class="line"><span class="string">        &#123;</span></span><br><span class="line"><span class="string">            &quot;id&quot;:&quot;10001&quot;,</span></span><br><span class="line"><span class="string">            &quot;name&quot;:&quot;我是测试数&quot;,</span></span><br><span class="line"><span class="string">            &quot;status&quot;:&quot;已发布&quot;,</span></span><br><span class="line"><span class="string">            &quot;objectName&quot;:&quot;我是测试数据-name&quot;,</span></span><br><span class="line"><span class="string">            &quot;Fqn&quot;:&quot;test.data2&quot;</span></span><br><span class="line"><span class="string">        &#125;,</span></span><br><span class="line"><span class="string">        &#123;</span></span><br><span class="line"><span class="string">            &quot;id&quot;:&quot;10002&quot;,</span></span><br><span class="line"><span class="string">            &quot;name&quot;:&quot;newdata&quot;,</span></span><br><span class="line"><span class="string">            &quot;status&quot;:&quot;PUBLISHED&quot;,</span></span><br><span class="line"><span class="string">            &quot;objectName&quot;:&quot;新的数据&quot;,</span></span><br><span class="line"><span class="string">            &quot;Fqn&quot;:&quot;test.data2&quot;</span></span><br><span class="line"><span class="string">        &#125;</span></span><br><span class="line"><span class="string">    ],</span></span><br><span class="line"><span class="string">    &quot;pages&quot;:2</span></span><br><span class="line"><span class="string">&#125;</span></span><br><span class="line"><span class="string">&#125;</span></span><br><span class="line"><span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line">test_data = jsonTest.get(<span class="string">&#x27;data&#x27;</span>) <span class="comment">#获取到data下的所有数据，list类型</span></span><br><span class="line">targetDate = [] <span class="comment">#这里也不一定用list，后面再看，总之先实现了功能</span></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> test_data:</span><br><span class="line">    name = i.get(<span class="string">&#x27;name&#x27;</span>) <span class="comment">#i是dict,可以通过key获取到value</span></span><br><span class="line">    <span class="keyword">if</span> name == <span class="string">&#x27;新的数据&#x27;</span>:</span><br><span class="line">        targetDate.append(i[<span class="string">&#x27;name&#x27;</span>]) <span class="comment">#把字典里value添加到list中</span></span><br><span class="line">        targetDate.append(i[<span class="string">&#x27;objectName&#x27;</span>])</span><br><span class="line">        targetDate.append(i[<span class="string">&#x27;Fqn&#x27;</span>])</span><br><span class="line">        targetDate.append(i[<span class="string">&#x27;id&#x27;</span>])</span><br><span class="line"><span class="comment">#通过上面的数据生成新的json结构</span></span><br><span class="line"><span class="comment">#新的json结构如下，先这么写着，还没改造好。</span></span><br><span class="line">action = &#123;</span><br><span class="line">    <span class="string">&quot;id&quot;</span>:targetDate[<span class="number">3</span>],</span><br><span class="line">    <span class="string">&quot;name&quot;</span>:<span class="string">&quot;随便取一个&quot;</span>, </span><br><span class="line">    <span class="string">&quot;startTime&quot;</span>:startTime,</span><br><span class="line">    <span class="string">&quot;endTime&quot;</span>:endTime,</span><br><span class="line">    <span class="string">&quot;objectFqn&quot;</span>:targetDate[<span class="number">2</span>],</span><br><span class="line">    <span class="string">&quot;objectName&quot;</span>:targetDate[<span class="number">1</span>],</span><br><span class="line">    <span class="string">&quot;objectEntityName&quot;</span>:targetDate[<span class="number">0</span>]</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>生成多层json结构</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#生成如下json格式</span></span><br><span class="line"><span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">&#123;</span></span><br><span class="line"><span class="string">    &quot;OpportunityId&quot;:&quot;507384&quot;,</span></span><br><span class="line"><span class="string">    &quot;ruleContent&quot;:&#123;</span></span><br><span class="line"><span class="string">        &quot;root&quot;:&#123;</span></span><br><span class="line"><span class="string">            &quot;nodeType&quot;:&quot;OPERATOR&quot;,</span></span><br><span class="line"><span class="string">            &quot;nodeOperator&quot;:&#123;</span></span><br><span class="line"><span class="string">                &quot;operator&quot;:&quot;AND&quot;</span></span><br><span class="line"><span class="string">            &#125;,</span></span><br><span class="line"><span class="string">            &quot;children&quot;:[</span></span><br><span class="line"><span class="string">                &#123;</span></span><br><span class="line"><span class="string">                    &quot;nodeType&quot;:&quot;OPERATOR&quot;,</span></span><br><span class="line"><span class="string">                    &quot;nodeOperator&quot;:&#123;</span></span><br><span class="line"><span class="string">                        &quot;operator&quot;:&quot;开头是&quot;</span></span><br><span class="line"><span class="string">                    &#125;,</span></span><br><span class="line"><span class="string">                    &quot;children&quot;:[</span></span><br><span class="line"><span class="string">                        &#123;</span></span><br><span class="line"><span class="string">                            &quot;nodeType&quot;:&quot;PROPERTY&quot;,</span></span><br><span class="line"><span class="string">                            &quot;nodeProperty&quot;:&#123;</span></span><br><span class="line"><span class="string">                                &quot;dataType&quot;:&#123;</span></span><br><span class="line"><span class="string">                                    &quot;dataTypeBasis&quot;:&quot;Email&quot;,</span></span><br><span class="line"><span class="string">                                    &quot;dataTypeRestrict&quot;:&quot;SINGLE&quot;</span></span><br><span class="line"><span class="string">                                &#125;,</span></span><br><span class="line"><span class="string">                                &quot;conditionId&quot;:&quot;500685&quot;,</span></span><br><span class="line"><span class="string">                                &quot;conditionName&quot;:&quot;StringEmail&quot;</span></span><br><span class="line"><span class="string">                            &#125;</span></span><br><span class="line"><span class="string">                        &#125;,</span></span><br><span class="line"><span class="string">                        &#123;</span></span><br><span class="line"><span class="string">                            &quot;nodeType&quot;:&quot;VALUE&quot;,</span></span><br><span class="line"><span class="string">                            &quot;nodeValue&quot;:&#123;</span></span><br><span class="line"><span class="string">                                &quot;value&quot;:&#123;</span></span><br><span class="line"><span class="string">                                    &quot;type&quot;:&#123;</span></span><br><span class="line"><span class="string">                                        &quot;dataTypeBasis&quot;:&quot;String&quot;,</span></span><br><span class="line"><span class="string">                                        &quot;dataTypeRestrict&quot;:&quot;SINGLE&quot;</span></span><br><span class="line"><span class="string">                                    &#125;,</span></span><br><span class="line"><span class="string">                                    &quot;value&quot;:&quot;口头&quot;</span></span><br><span class="line"><span class="string">                                &#125;</span></span><br><span class="line"><span class="string">                            &#125;</span></span><br><span class="line"><span class="string">                        &#125;</span></span><br><span class="line"><span class="string">                    ]</span></span><br><span class="line"><span class="string">                &#125;,</span></span><br><span class="line"><span class="string">                &#123;</span></span><br><span class="line"><span class="string">                    &quot;nodeType&quot;:&quot;OPERATOR&quot;,</span></span><br><span class="line"><span class="string">                    &quot;nodeOperator&quot;:&#123;</span></span><br><span class="line"><span class="string">                        &quot;operator&quot;:&quot;EQ&quot;</span></span><br><span class="line"><span class="string">                    &#125;,</span></span><br><span class="line"><span class="string">                    &quot;children&quot;:[</span></span><br><span class="line"><span class="string">                        &#123;</span></span><br><span class="line"><span class="string">                            &quot;nodeType&quot;:&quot;PROPERTY&quot;,</span></span><br><span class="line"><span class="string">                            &quot;nodeProperty&quot;:&#123;</span></span><br><span class="line"><span class="string">                                &quot;dataType&quot;:&#123;</span></span><br><span class="line"><span class="string">                                    &quot;dataTypeBasis&quot;:&quot;Url&quot;,</span></span><br><span class="line"><span class="string">                                    &quot;dataTypeRestrict&quot;:&quot;SINGLE&quot;</span></span><br><span class="line"><span class="string">                                &#125;,</span></span><br><span class="line"><span class="string">                                &quot;conditionId&quot;:&quot;500679&quot;,</span></span><br><span class="line"><span class="string">                                &quot;conditionName&quot;:&quot;StringUrl&quot;</span></span><br><span class="line"><span class="string">                            &#125;</span></span><br><span class="line"><span class="string">                        &#125;,</span></span><br><span class="line"><span class="string">                        &#123;</span></span><br><span class="line"><span class="string">                            &quot;nodeType&quot;:&quot;VALUE&quot;,</span></span><br><span class="line"><span class="string">                            &quot;nodeValue&quot;:&#123;</span></span><br><span class="line"><span class="string">                                &quot;value&quot;:&#123;</span></span><br><span class="line"><span class="string">                                    &quot;type&quot;:&#123;</span></span><br><span class="line"><span class="string">                                        &quot;dataTypeBasis&quot;:&quot;String&quot;,</span></span><br><span class="line"><span class="string">                                        &quot;dataTypeRestrict&quot;:&quot;SINGLE&quot;</span></span><br><span class="line"><span class="string">                                    &#125;,</span></span><br><span class="line"><span class="string">                                    &quot;value&quot;:&quot;ereger&quot;</span></span><br><span class="line"><span class="string">                                &#125;</span></span><br><span class="line"><span class="string">                            &#125;</span></span><br><span class="line"><span class="string">                        &#125;</span></span><br><span class="line"><span class="string">                    ]</span></span><br><span class="line"><span class="string">                &#125;</span></span><br><span class="line"><span class="string">            ]</span></span><br><span class="line"><span class="string">        &#125;,</span></span><br><span class="line"><span class="string">        &quot;expression&quot;:&quot;[&#123;&quot;rootOperator&quot;:&quot;AND&quot;,&quot;operator&quot;:&quot;starts with&quot;,&quot;conditionName&quot;:&quot;StringEmail&quot;,&quot;firstValue&quot;:&quot;口头&quot;,&quot;lastValue&quot;:&quot;&quot;,&quot;conditionNameI18n&quot;:&#123;&quot;zh-CN&quot;:&quot;StringEmail&quot;&#125;&#125;,&#123;&quot;rootOperator&quot;:&quot;AND&quot;,&quot;operator&quot;:&quot;=&quot;,&quot;conditionName&quot;:&quot;StringUrl&quot;,&quot;firstValue&quot;:&quot;ereger&quot;,&quot;lastValue&quot;:&quot;&quot;,&quot;conditionNameI18n&quot;:&#123;&quot;zh-CN&quot;:&quot;StringUrl&quot;&#125;&#125;]&quot;</span></span><br><span class="line"><span class="string">    &#125;</span></span><br><span class="line"><span class="string">&#125;</span></span><br><span class="line"><span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="keyword">import</span> json</span><br><span class="line"></span><br><span class="line">conditionJson = &#123;&#125;</span><br><span class="line">data = json.loads(json.dumps(conditionJson))</span><br><span class="line">OpportunityId = <span class="string">&#x27;507372&#x27;</span></span><br><span class="line">data[<span class="string">&#x27;OpportunityId&#x27;</span>] = OpportunityId</span><br><span class="line"></span><br><span class="line">ruleContent = &#123;<span class="string">&#x27;root&#x27;</span>: &#123;&#125; ,<span class="string">&#x27;expression&#x27;</span>: []&#125;</span><br><span class="line">data[<span class="string">&#x27;ruleContent&#x27;</span>] = ruleContent</span><br><span class="line"></span><br><span class="line">root = &#123;<span class="string">&#x27;nodeType&#x27;</span>:<span class="string">&quot;OPERATOR&quot;</span>,<span class="string">&#x27;nodeOperator&#x27;</span>:&#123; <span class="string">&#x27;operator&#x27;</span>:<span class="string">&#x27;AND&#x27;</span> &#125;,<span class="string">&#x27;children&#x27;</span>:[]&#125;</span><br><span class="line">data[<span class="string">&#x27;ruleContent&#x27;</span>][<span class="string">&#x27;root&#x27;</span>] = root</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">#先生产这个</span></span><br><span class="line">conditionId =<span class="string">&#x27;&#x27;</span></span><br><span class="line">openid = <span class="string">&#x27;&#x27;</span></span><br><span class="line">dataTypeBasis = <span class="string">&#x27;&#x27;</span></span><br><span class="line">value = <span class="string">&#x27;&#x27;</span></span><br><span class="line">children = [&#123;<span class="string">&#x27;nodeType&#x27;</span>:<span class="string">&#x27;PROPERTY&#x27;</span>,<span class="string">&#x27;nodeProperty&#x27;</span>:&#123;<span class="string">&#x27;dataType&#x27;</span>:&#123;<span class="string">&#x27;dataTypeBasis&#x27;</span>:dataTypeBasis,<span class="string">&#x27;dataTypeRestrict&#x27;</span>:<span class="string">&#x27;SINGLE&#x27;</span>&#125;,<span class="string">&#x27;conditionId&#x27;</span>:conditionId,<span class="string">&#x27;conditionName&#x27;</span>:openid&#125;&#125;,&#123;<span class="string">&#x27;nodeType&#x27;</span>:<span class="string">&#x27;VALUE&#x27;</span>,<span class="string">&#x27;nodeValue&#x27;</span>:&#123;<span class="string">&#x27;value&#x27;</span>:&#123;<span class="string">&#x27;type&#x27;</span>:&#123;<span class="string">&#x27;dataTypeBasis&#x27;</span>:dataTypeBasis,<span class="string">&#x27;dataTypeRestrict&#x27;</span>:<span class="string">&#x27;SINGLE&#x27;</span>&#125;,<span class="string">&#x27;value&#x27;</span>:value&#125;&#125;&#125;]</span><br><span class="line"></span><br><span class="line">operator = <span class="string">&#x27;开头是&#x27;</span></span><br><span class="line">children = [&#123;<span class="string">&#x27;nodeType&#x27;</span>:<span class="string">&#x27;OPERATOR&#x27;</span>,<span class="string">&#x27;nodeOperator&#x27;</span>:&#123;<span class="string">&#x27;operator&#x27;</span>: operator&#125;,<span class="string">&#x27;children&#x27;</span>:children&#125;,&#123;<span class="string">&#x27;nodeType&#x27;</span>:<span class="string">&#x27;OPERATOR&#x27;</span>,<span class="string">&#x27;nodeOperator&#x27;</span>:&#123;<span class="string">&#x27;operator&#x27;</span>: operator&#125;,<span class="string">&#x27;children&#x27;</span>:[]&#125;]</span><br><span class="line"></span><br><span class="line">data[<span class="string">&#x27;ruleContent&#x27;</span>][<span class="string">&#x27;root&#x27;</span>][<span class="string">&#x27;children&#x27;</span>] = children</span><br><span class="line"></span><br><span class="line">lconditionJson = json.dumps(data, ensure_ascii=<span class="literal">False</span>)</span><br><span class="line">print(lconditionJson)</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;需要实现得需求：获取0时区（UTC）的时间；可以加减秒数；时间格式为 &lt;code&gt;yyyy-MM-dd’T’HH：mm：ss.SSS&lt;/code&gt;&lt;/p&gt;
&lt;figure class=&quot;highlight python&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutt</summary>
      
    
    
    
    <category term="python" scheme="https://emilyty.github.io/categories/python/"/>
    
    
    <category term="python" scheme="https://emilyty.github.io/tags/python/"/>
    
  </entry>
  
  <entry>
    <title>软件测试从业者，需掌握的数据库体系知识</title>
    <link href="https://emilyty.github.io/2020/11/16/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E4%BB%8E%E4%B8%9A%E8%80%85%EF%BC%8C%E9%9C%80%E6%8E%8C%E6%8F%A1%E7%9A%84%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BD%93%E7%B3%BB%E7%9F%A5%E8%AF%86/"/>
    <id>https://emilyty.github.io/2020/11/16/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E4%BB%8E%E4%B8%9A%E8%80%85%EF%BC%8C%E9%9C%80%E6%8E%8C%E6%8F%A1%E7%9A%84%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BD%93%E7%B3%BB%E7%9F%A5%E8%AF%86/</id>
    <published>2020-11-16T05:43:18.000Z</published>
    <updated>2020-11-16T08:42:40.614Z</updated>
    
    <content type="html"><![CDATA[<p>从<a href="http://mp.weixin.qq.com/s?__biz=MzAxMTM2NzQ5MA==&mid=2651070947&idx=1&sn=51e326c4a2f7e96ce66421e145861fc8&chksm=80b2a4ceb7c52dd848385055a2a6babea7603d903a69a2eaa103d4e5edad072ebd2987a9ea50&scene=21#wechat_redirect">知识体系</a>的角度，数据库、Linux、测试理论、软件工程知识、计算机基础、网络基础、<a href="http://istester.com/linux/227.html">服务器</a> 基础、程序语言基础（Java / Python）等，都是软件测试从业者必须具备的基础知识。</p><p>如上，各方面，之前有文章专题聊过。<br>响应各从业者需求，<strong>聊聊数据库这块</strong> 。</p><p>老徐一直认为数据库没啥好讲的，就那么点东西，自己折腾下就会了。<br>然而，从实际的了解来看，很多从业者对数据库是有强需求，有些甚至工作中都没接触过数据库，导致第一次接触时，完全没概念 。<br>**<br>**</p><p>**<br>**</p><p><strong>软件测试从业者，需要掌握的数据库知识体系可以分为三个阶段 。</strong><br>**<br>**</p><p><strong>第一阶段（多数测试从业者足够）</strong><br>\1. 至少得知道常见的数据库类型Mysql 、MSSQL 、 Oracle 、 Memcached 、 Redis 、 Mongodb 等<br>注：如下以MYSQL为例 。<br>\2. 数据库的安装、部署 ，基础使用 。你至少得会自己在服务器 或 自己电脑上安装个数据库。 3. 常见的数据库链接工具。<br>如 WorkBench  Navicat  phpMyAdmin 等 。<br>\4. 数据库基础配置 。修改密码、添加用户等。<br>\5. 创建/删除库、创建/删除表、查看库、查看表。<br>\6. 基本的增删改查 语句。</p><p><strong>第二阶段（一些对数据有强需求的业务测试）</strong><br>\7. 备份、还原数据库 。<br>\8. 稍微复杂点的SQL 多表查询、子查询 等等。<br>\9. 存储过程 、视图 等。<br>10.数据导入、导出数据 等。<br>11.造数据。实际测试过程中，经常需要通过数据库造一些测试数据。</p><p><strong>第三阶段（数据库的一些优化知识、安全知识 等 ，多数测试同学可以不掌握）**</strong><br>**如：慢SQL 、SQL优化、使用规范等 。主要是方便：定位问题、性能优化 等。</p><p>End<br>补充：<strong>具体的常用SQL语句，大家是否有需求否？</strong>如有，老徐可以简单列一些高频的 。**</p><hr><p><strong><strong>最后，</strong></strong>送上一本数据库相关的电子书，后台回复「MySQL」直接下载 。**</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;从&lt;a href=&quot;http://mp.weixin.qq.com/s?__biz=MzAxMTM2NzQ5MA==&amp;mid=2651070947&amp;idx=1&amp;sn=51e326c4a2f7e96ce66421e145861fc8&amp;chksm=80b2a4ceb7c52dd</summary>
      
    
    
    
    
    <category term="mysql" scheme="https://emilyty.github.io/tags/mysql/"/>
    
  </entry>
  
  <entry>
    <title>mysql常用语法学习下</title>
    <link href="https://emilyty.github.io/2020/11/16/mysql%E5%B8%B8%E7%94%A8%E8%AF%AD%E6%B3%95%E5%AD%A6%E4%B9%A0%E4%B8%8B/"/>
    <id>https://emilyty.github.io/2020/11/16/mysql%E5%B8%B8%E7%94%A8%E8%AF%AD%E6%B3%95%E5%AD%A6%E4%B9%A0%E4%B8%8B/</id>
    <published>2020-11-16T05:38:17.000Z</published>
    <updated>2020-11-16T05:39:21.557Z</updated>
    
    <content type="html"><![CDATA[<p>第17天作业 ，</p><p>– 1）修改表idoxu，把字段istester ，改为istester6（字符类型varchar，长度160 ）</p><p>– 2）检查是否修改成功</p><p>– 3）把idoxu表，改名为 idoxu6</p><p>– 4）检查是否修改成功</p><p>前一天作业答案参考 ，</p><p>造数据 ，把istester表的所有数据，插入到 idoxu表</p><p>字段关系</p><p>id 取id</p><p>stu_id 取id</p><p>c_name 取 uname</p><p>istester 和 grade字段，给默认值 60</p><p>insert into idoxu(id,stu_id,c_name,istester,grade) select id,id,uname,60,60 from istester ;</p><p>/</p><p>第18天作业 ，</p><p>1）创建数据库 istesterdb6</p><p>2）检查数据库是否创建成功 ；</p><p>3）进入istesterdb6 库</p><p>4）在数据库 istesterdb6 ，创建idoxu表，直接拷贝 istester库idoxu6表的数据和结构 ；</p><p>5）检查表是否创建成功 ；</p><p>前一天作业答案参考 ，</p><p>– 1）修改表idoxu，把字段istester ，改为istester6（字符类型varchar，长度160 ）</p><p>alter table idoxu CHANGE istester istester6 varchar(160);</p><p>– 2）检查是否修改成功</p><p>desc idoxu;</p><p>– 3）把idoxu表，改名为 idoxu6</p><p>– ALTER TABLE 旧表名 RENAME TO 新表名 ;</p><p>ALTER TABLE idoxu RENAME TO idoxu681 ;</p><p>– 4）检查是否修改成功</p><p>show tables;</p><p>/</p><p>第19天作业 ，</p><p>idoxu表，分数grade</p><p>1）排名前三的学生 和分数 ；</p><p>2）排名3 - 6名的学生 和分数 ；</p><p>3）排名6名以后的所有学生 和分数 ；</p><p>前一天作业答案参考 ，</p><p>1）创建数据库 istesterdb6</p><p>create database istesterdb6 ;</p><p>2）检查数据库是否创建成功 ；</p><p>show databases ;</p><p>3）进入istesterdb6 库</p><p>use istesterdb6 ;</p><p>4）在数据库 istesterdb6 ，创建idoxu表，直接拷贝 istester库idoxu6表的数据和结构 ；</p><p>create table istesterdb6.idoxu as SELECT * from istester.idoxu6;</p><p>或</p><p>create table idoxu as SELECT * from istester.idoxu6;</p><p>5）检查表是否创建成功 ；</p><p>show tables;</p><p>/</p><p>第20天作业 ，</p><p>多表（左链接、右链接、内链接）</p><p>表 idoxu6 和 表istester</p><p>前一天作业答案参考 ，</p><p>– 1）排名前三的学生 和分数 ； </p><p>SELECT c_name,grade FROM idoxu ORDER BY grade DESC LIMIT 3; </p><p>– 2）排名3 - 6名的学生 和分数 ； </p><p>SELECT c_name,grade FROM idoxu ORDER BY grade DESC LIMIT 2,4; </p><p>– 3）排名6名以后的所有学生 和分数 ； </p><p>SELECT c_name,grade FROM idoxu ORDER BY grade DESC LIMIT 5,666;</p><p>注：这题目的是limit的用法，很多同学写的太复杂 ；</p><p>limit是mysql的语法</p><p>select * from table limit m,n</p><p>其中m是指记录开始的index，从0开始，表示第一条记录</p><p>n是指从第m+1条开始，取n条。</p><p>select * from tablename limit 2,4</p><p>即取出第3条至第6条，4条记录</p><p>/</p><p>第21天作业（最后1天，结业） ，</p><p>1）把表idoxu6，改完idoxu</p><p>2）删除库 istesterdb6</p><p>3）删除istester表</p><p>4）清空idoxu表的数据</p><p>End ，一切恢复如初，坐等SQL第2期 ；</p><p>前一天作业答案参考 ，</p><p>注：主要目的是熟悉这三种玩法，以及观察结果差异 ；</p><p>#左连接 </p><p>SELECT * from idoxu6 a LEFT JOIN istester b on a.stu_id=b.id; </p><p>#内连接 </p><p>SELECT * from idoxu6 a INNER JOIN istester b on a.stu_id=b.id; </p><p>#右连接 </p><p>SELECT * from idoxu6 a RIGHT JOIN istester b on a.stu_id=b.id;</p><p>/</p><p>结业，最后一天作业答案参考</p><p>1）把表idoxu6，改名为idoxu </p><p>rename table idoxu6 to idoxu; </p><p>或</p><p>alter table idoxu6 rename idoxu; </p><p>2）删除库 istesterdb6 </p><p>drop database istesterdb6; </p><p>3）删除istester表 </p><p>drop table istester; </p><p>4）清空idoxu表的数据 </p><p>truncate table idoxu; </p><p>或</p><p>delete from idoxu;</p><p>End ，恭喜结业 ；</p><p>循环3次21天打卡，总共63天（两个月掌握软测必备的SQL日常使用）</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;第17天作业 ，&lt;/p&gt;
&lt;p&gt;– 1）修改表idoxu，把字段istester ，改为istester6（字符类型varchar，长度160 ）&lt;/p&gt;
&lt;p&gt;– 2）检查是否修改成功&lt;/p&gt;
&lt;p&gt;– 3）把idoxu表，改名为 idoxu6&lt;/p&gt;
&lt;p&gt;– 4）检查</summary>
      
    
    
    
    
    <category term="mysql" scheme="https://emilyty.github.io/tags/mysql/"/>
    
  </entry>
  
  <entry>
    <title>mysql常用语法学习中</title>
    <link href="https://emilyty.github.io/2020/11/16/mysql%E5%B8%B8%E7%94%A8%E8%AF%AD%E6%B3%95%E5%AD%A6%E4%B9%A0%E4%B8%AD/"/>
    <id>https://emilyty.github.io/2020/11/16/mysql%E5%B8%B8%E7%94%A8%E8%AF%AD%E6%B3%95%E5%AD%A6%E4%B9%A0%E4%B8%AD/</id>
    <published>2020-11-16T05:37:36.000Z</published>
    <updated>2020-11-16T05:39:56.000Z</updated>
    
    <content type="html"><![CDATA[<p>第8天作业 ，</p><p>继续 select </p><p>1）查找idoxu表，名称（c_name）包含 “i” 的数据</p><p>2）查找istester表，id 包含 “1” 的数据</p><p>3）查找istester表，id 包含 “1” 的数据，按id降序 </p><p>4）查找istester表，id 包含 “1” 的数据 ，取id最大的三个</p><p>前一天作业答案参考 ，</p><p>1）查询istester表 id = 1的内容</p><p>select * from istester where id = 1;</p><p>2）查询idoxu 表 grade=100 的内容</p><p>select * from idoxu where grade =100;</p><p>/</p><p>第9天作业 ，</p><p>1）找出idoxu表中，分数最高的同学和分数</p><p>2）找出idoxu表中，分数最低的同学和分数</p><p>前一天作业答案参考 ，</p><p>1）查找idoxu表，名称（c_name）包含 “i” 的数据</p><p>select * from idoxu where c_name like ‘%i%’ ;</p><p>2）查找istester表，id 包含 “1” 的数据</p><p>select * from istester where id like ‘%1%’;</p><p>3）查找istester表，id 包含 “1” 的数据，按id降序 </p><p>select * from istester where id like ‘%1%’ order by id desc ;</p><p>4）查找istester表，id 包含 “1” 的数据 ，取id最大的三个</p><p>select * from istester where id like ‘%1%’ order by id desc limit 3 ;</p><p>/</p><p>第10天作业 ，</p><p>– 1) 找出istester表，sex为空的的数据；</p><p>– 2）更新istester表，把sex为空的，设置为0（性别未知）</p><p>– 3）找出idoxu表，grade小于60分的同学</p><p>– 4）更新idoxu表，把grade小于60分的同学，一律改为59分</p><p>前一天作业答案参考 ，</p><p>– 1）找出idoxu表中，分数最高的同学和分数；</p><p>SELECT c_name,grade as “maxvalue” from idoxu WHERE grade in (select MAX(grade) from idoxu ) ;</p><p>– 2）找出idoxu表中，分数最低的同学和分数；</p><p>SELECT c_name,grade as “minvalue” from idoxu WHERE grade in (SELECT MIN(grade) from idoxu );</p><p>/</p><p>第11天作业 ，</p><p>– 1）查找istester表，按id降序</p><p>– 2）查找idoxu表，按grade升序</p><p>前一天作业答案参考 ，</p><p>– 1) 找出istester表，sex为空的的数据；</p><p>select * from istester where sex is null ;</p><p>– 2）更新istester表，sex为空的，设置为0（性别未知）</p><p>update istester set sex = 0 where sex is null ;</p><p>– 3）找出idoxu表，grade小于60分的同学</p><p>select * from idoxu where grade &lt; 60 ;</p><p>– 4）更新idoxu表，把grade小于60分的同学，一律改为59分</p><p>update idoxu set grade = 59 where grade &lt; 60 ;</p><p>/</p><p>第12天作业 ，</p><p>1）查询istester表，有多少条数据</p><p>2）查询istester表，有几种性别类型（sex字段，去重）</p><p>前一天作业答案参考 ，</p><p>– 1）查找istester表，按id降序</p><p>select * from istester order by id desc;</p><p>– 2）查找idoxu表，按grade升序</p><p>select * from idoxu order by grade;</p><p>/</p><p>第13天作业 ，</p><p>1）查找idoxu表，学生成绩(grade) 总分</p><p>2）查找idoxu表，学生成绩(grade) 平均分</p><p>前一天作业答案参考 ，</p><p>1）查询istester表，有多少行数据</p><p>select COUNT(sex) from istester;</p><p>2）查询istester表，有性别类型数量（sex字段，去重）</p><p>select COUNT(DISTINCT sex) from istester;</p><p>/</p><p>第14天作业 ，</p><p>1）查找idoxu表，成绩在80 - 100区间的学生 ；</p><p>2）查找istester表，id 为 2，11，12 的数据 ；</p><p>前一天作业答案参考 ，</p><p>1）查找idoxu表，学生成绩(grade) 总分</p><p>select sum(grade) as sumgrade from idoxu ;</p><p>2）查找idoxu表，学生成绩(grade) 平均分</p><p>select avg(grade) as avggrade from idoxu ;</p><p>/</p><p>第15天作业 ，</p><p>1）删除 istester表，id大于12的数据 ；</p><p>2）删除idoxu表，分数grade不及格（小于60分）的数据 ；</p><p>前一天作业答案参考 ，</p><p>– 1）查找idoxu表，成绩在80 - 100区间的学生 ；</p><p>select * from idoxu where grade between 80 and 100;</p><p>– 2）查找istester表，id 为 2，11，12 的数据 ；</p><p>select * from istester where id in (2,11,12) ;</p><p>/</p><p>第16天作业 ，</p><p>1）造数据 ，把istester表的所有数据，插入到 idoxu表</p><p>字段取值规则</p><p>id 取id</p><p>stu_id 取id</p><p>c_name 取 uname</p><p>istester 和 grade字段，给默认值 60</p><p>前一天作业答案参考 ，</p><p>1）删除 istester表，id大于12的数据 ；</p><p>delete from istester where id &gt; 12;</p><p>2）删除idoxu表，分数grade不及格（小于60分）的数据 ；</p><p>delete from idoxu where grade &lt; 60 ;</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;第8天作业 ，&lt;/p&gt;
&lt;p&gt;继续 select &lt;/p&gt;
&lt;p&gt;1）查找idoxu表，名称（c_name）包含 “i” 的数据&lt;/p&gt;
&lt;p&gt;2）查找istester表，id 包含 “1” 的数据&lt;/p&gt;
&lt;p&gt;3）查找istester表，id 包含 “1” 的数据，按i</summary>
      
    
    
    
    
    <category term="mysql" scheme="https://emilyty.github.io/tags/mysql/"/>
    
  </entry>
  
  <entry>
    <title>mysql常用语法学习上</title>
    <link href="https://emilyty.github.io/2020/11/16/mysql%E5%B8%B8%E7%94%A8%E8%AF%AD%E6%B3%95%E5%AD%A6%E4%B9%A0%E4%B8%8A/"/>
    <id>https://emilyty.github.io/2020/11/16/mysql%E5%B8%B8%E7%94%A8%E8%AF%AD%E6%B3%95%E5%AD%A6%E4%B9%A0%E4%B8%8A/</id>
    <published>2020-11-16T05:35:47.000Z</published>
    <updated>2020-11-16T05:40:53.418Z</updated>
    
    <content type="html"><![CDATA[<p>开始前的准备事项，第0天 ，</p><p>开始之前的，前置准备事项：</p><p>1、在自己电脑上安装一个mysql数据库，文章见 -&gt; <a href="http://istester.com/article/258.html">http://istester.com/article/258.html</a></p><p>2、找一个mysql客户端链接工具：推荐workbench ，<a href="http://istester.com/zhiye/415.html">安装包</a> <a href="http://istester.com/article/405.html">http://istester.com/article/405.html</a></p><p>/</p><p>第1天作业 ，</p><p>1）创建数据库 istester</p><p>2）查看数据库创建是否成功</p><p>/</p><p>第2天作业 ，</p><p>在昨天创建的isTester数据库下，创建 表 istester 和 表 idoxu</p><p>注：SQL的作业，前几天的 库、表，都是打基础；没有这些，后面的增删改查，你也没法玩 ；</p><p>1）isTester表的字段、类型、属性：</p><p>id INT(10) NOT NULL UNIQUE PRIMARY KEY ,</p><p>uname VARCHAR(20) NOT NULL ,</p><p>sex VARCHAR(4) ,</p><p>birth YEAR,</p><p>department VARCHAR(20) ,</p><p>address VARCHAR(50) ,</p><p>idoxu VARCHAR(20) </p><p>2）idoxu表的字段、类型、属性：</p><p>id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT ,</p><p>stu_id INT(10) NOT NULL ,</p><p>c_name VARCHAR(20) ,</p><p>istester VARCHAR(50) ,</p><p>grade INT(10)</p><p>前一天作业答案参考 ，</p><p>1）创建数据库 istester</p><p>DROP DATABASE IF EXISTS istester;</p><p>CREATE DATABASE IF NOT EXISTS istester;</p><p>2）查看数据库创建是否成功</p><p>show DATABASES;</p><p>/</p><p>第3天作业 ，</p><p>根据已有的表istester 和 idoxu 创建新表（复制表）</p><p>1）复制istester表结构，创建新表istester2</p><p>注：可以有两种方式</p><p>2）复制idoxu表结构和数据，创建新表idoxu2</p><p>3）复制idoxu表结构的 id,stu_id,istester三个字段，创建新表idoxu3</p><p>前一天作业答案参考 ，</p><p>创建istester和idoxu表</p><p>CREATE TABLE istester (</p><p>id INT(10) NOT NULL UNIQUE PRIMARY KEY ,</p><p>uname VARCHAR(20) NOT NULL ,</p><p>sex VARCHAR(4) ,</p><p>birth YEAR,</p><p>department VARCHAR(20) ,</p><p>address VARCHAR(50) ,</p><p>idoxu VARCHAR(20) </p><p>);</p><p>CREATE TABLE idoxu (</p><p>id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT ,</p><p>stu_id INT(10) NOT NULL ,</p><p>c_name VARCHAR(20) ,</p><p>istester VARCHAR(50) ,</p><p>grade INT(10)</p><p>);</p><p>/</p><p>第4天作业 ，</p><p>1）删除表 istester2</p><p>2）同时删除表idoxu2和idoxu3</p><p>3）查看还有哪些表</p><p>前一天作业答案参考 ，</p><p>1）复制istester表结构，创建新表istester2</p><p>注：可以有两种方式</p><p>create table istester2 like istester ;</p><p>或</p><p>create table idoxu2 as select * from idoxu where 2=1;</p><p>2）复制idoxu表结构和数据，创建新表idoxu3</p><p>create table idoxu3 as select * from idoxu</p><p>3）复制idoxu表结构的 id,stu_id,istester三个字段，创建新表idoxu3</p><p>create table idoxu3 as select id,stu_id,istester from idoxu where 1&lt;&gt;1;</p><p>/</p><p>第5天作业 ，</p><p>1）修改istester表，添加一个字段istester6 （字符类型VARCHAR，长度100，不允许为空）</p><p>2）查看字段istester6 ，是否添加成功 </p><p>3）修改istester表，删除字段istester6</p><p>4）确认字段istester6 ，是否删除成功</p><p>前一天作业答案参考 ，</p><p>1）删除表 istester2</p><p>drop table istester2 ;</p><p>2）同时删除表idoxu2和idoxu3</p><p>drop table idoxu2,idoxu3 ;</p><p>3）查看还有哪些表</p><p>show tables;</p><p>/</p><p>第6天作业 ，</p><p>插入 insert：</p><p>1）向表istester插入数据</p><p>id = 1 ,uname = idoxu ,idoxu = 2020</p><p>id = 2 ,uname = idoxu2 ,idoxu = 2020</p><p>id=11,uname = idoxu3,sex=1</p><p>id=12,uname = idoxu4,sex=2</p><p>id=13,uname = idoxu5,sex=1</p><p>id=14,uname = idoxu6,sex=2</p><p>2）向表idoxu插入数据</p><p>id=4,stu_id=11,c_name=idoxu,grade=90</p><p>id=5,stu_id=12,c_name=lin,grade=100</p><p>id=6,stu_id=33,c_name=istester,grade=20</p><p>前一天作业答案参考 ，</p><p>1）修改istester表，添加一个字段istester6 （字符类型VARCHAR，长度100，不允许为空）</p><p>ALTER table istester add column istester6 VARCHAR(100) NOT NULL;</p><p>2）查看字段istester6 ，是否添加成功</p><p>desc istester</p><p>3）修改istester表，删除字段istester6</p><p>ALTER table istester drop istester6</p><p>4）确认字段istester6 ，是否删除成功</p><p>desc istester</p><p>/</p><p>第7天作业 ，</p><p>1）查询istester表 id = 1 的内容</p><p>2）查询idoxu 表 grade=100 的内容</p><p>前一天作业答案参考 ，</p><p>插入 insert：</p><p>1）向表istester插入数据</p><p>id = 1 ,uname = idoxu ,idoxu = 2020</p><p>id = 2 ,uname = idoxu2 ,idoxu = 2020</p><p>id=11,uname = idoxu3,sex=1</p><p>id=12,uname = idoxu4,sex=2</p><p>id=13,uname = idoxu5,sex=1</p><p>id=14,uname = idoxu6,sex=2</p><p>2）向表idoxu插入数据</p><p>id=4,stu_id=11,c_name=idoxu,grade=90</p><p>id=5,stu_id=12,c_name=lin,grade=100</p><p>id=6,stu_id=33,c_name=istester,grade=20</p><p>参考语句：</p><p>insert into istester(id,uname,idoxu) values(1,”idoxu”,2020);</p><p>insert into istester(id,uname,idoxu) values(2,”idoxu2”,2020);</p><p>insert into istester(id,uname,sex) values(11,”idoxu3”,1),(12,”idoxu4”,2),(13,”idoxu5”,1),(14,”idoxu6”,2);</p><p>insert into idoxu(id,stu_id,c_name,grade) values(4,11,”idoxu”,90),(5,12,”lin”,100),(6,33,”istester”,20);</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;开始前的准备事项，第0天 ，&lt;/p&gt;
&lt;p&gt;开始之前的，前置准备事项：&lt;/p&gt;
&lt;p&gt;1、在自己电脑上安装一个mysql数据库，文章见 -&amp;gt; &lt;a href=&quot;http://istester.com/article/258.html&quot;&gt;http://istester.</summary>
      
    
    
    
    
    <category term="mysql" scheme="https://emilyty.github.io/tags/mysql/"/>
    
  </entry>
  
  <entry>
    <title>软件测试常用linux命令</title>
    <link href="https://emilyty.github.io/2020/11/16/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%B8%B8%E7%94%A8linux%E5%91%BD%E4%BB%A4/"/>
    <id>https://emilyty.github.io/2020/11/16/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%B8%B8%E7%94%A8linux%E5%91%BD%E4%BB%A4/</id>
    <published>2020-11-16T04:22:34.000Z</published>
    <updated>2020-11-16T05:42:44.613Z</updated>
    
    <content type="html"><![CDATA[<p><strong>命令 cd</strong></p><ol><li><p>如何进入上级目录</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cd ..</span><br></pre></td></tr></table></figure></li><li><p>如何进入当前用户主目录</p><p>cd ~</p></li><li><p>如何进入上两级目录</p><p>cd ../..</p></li><li><p>进入当前目录命令</p><p>cd .</p></li><li><p>如何进入目录 /usr/isTester</p><p>cd /usr/isTester</p></li></ol><p><strong>命令 mv</strong></p><ol><li><p>移动一个文件夹（isTester文件夹，移动到/APP/www目录）</p><p>mv ~/isTester/ /APP/www</p></li><li><p>移动一个文件（isTester.ini 移动到/APP/www目录）</p><p>mv isTester.ini /APP/www</p></li><li><p>当前目录istester.tar.gz 移动到 /usr/ido 目录，并重命名为istester1228.tar.gz</p><p>mv isTester.tar.gz /usr/ido/ido.tar.gz</p></li><li><p>移动文件到上级目录</p><p>mv isTester.tar.gz ../</p></li><li><p>一条命令，移动两个文件 isTester.tar idoxu.tar 到目录 /APP/www</p><p>mv isTester.tar idoxu.tar -t /APP/www</p></li></ol><p><strong>命令 cp</strong></p><ol><li><p>复制当前目录部署包isTester.tar.gz 到备份目录/APP/www/bak 目录</p><p>cp isTester.tar.gz /APP/www/bak</p></li><li><p>复制文件夹 isTester 到部署目录 /APP/www</p><p>cp -r isTester/ /APP/www</p></li></ol><p><strong>命令 mkdir</strong></p><p>在目录/APP/www 下，</p><p>cd /APP/www </p><ol><li><p>新建一个文件夹 isTester</p><p>mkdir isTester</p></li><li><p>新建三个文件夹 isTester1 isTester2 isTester3</p><p>mkdir isTester1 isTester2 isTester3</p></li><li><p>新建一个多层级文件夹 idoxu/20181230/01</p><p>mkdir -p idoxu/20181230/01</p></li></ol><p><strong>命令 history</strong> </p><ol><li><p>查看历史命令执行记录 </p><p>history </p></li><li><p>查看命令mkdir 的历史执行记录 </p><p>history | grep mkdir </p></li><li><p>执行历史记录中，序号为178的命令 </p><p>!178</p></li></ol><p><strong>命令 tail</strong></p><ol><li><p>实时刷新log</p><p>tail -f isTester.log</p></li><li><p>实时刷新最新500条log</p><p>tail -500f isTester.log</p></li></ol><p><strong>命令 tar</strong></p><ol><li><p>压缩一个文件 isTester.ini </p><p>tar -cvf isTester.tar isTester.ini </p></li><li><p>压缩多个文件 isTester.ini readme.ini</p><p>tar -cvf all.tar isTester.ini readme.ini</p></li><li><p>压缩文件夹 isTester/</p><p>tar -cvf isTester.tar isTester/</p></li><li><p>将当前目录，所有jpg文件打包成isTesterjpg.tar</p><p>tar -cvf isTesterjpg.tar *.jpg</p></li><li><p>将当前目录，所有jpg文件打包成isTesterjpg.tar.gz</p><p>tar -zcvf isTesterjpg.tar.gz *.jpg</p></li><li><p>解压 isTesterjpg.tar</p><p>tar -xvf isTesterjpg.tar</p></li><li><p>解压 isTesterjpg.tar.gz</p><p>tar -zxvf isTesterjpg.tar.gz</p></li></ol><p><strong>命令 ls</strong></p><ol><li><p>列出当前目录中所有的子目录和文件。</p><p>ls</p></li><li><p>列出目录下的所有文件（包含隐**件）</p><p>ls -a</p></li><li><p>列出文件的详细信息（包括权限、所有者、文件大小等）</p><p>ls -l</p></li><li><p>列出当前目录中所有以“isTester”开头的详细内容</p><p>ls -l isTester*</p></li></ol><p><strong>命令 ps</strong></p><ol><li><p>查看所有进程</p><p>ps -A</p></li><li><p>查看java进程</p><p>ps -ef|grep java</p></li><li><p>显示所有进程信息，连同命令行</p><p>ps -ef</p></li></ol><p><strong>命令 top</strong></p><ol><li><p>显示进程信息</p><p>top</p></li><li><p>监控每个逻辑CPU的状况</p><p>top ，按 1</p></li><li><p>高亮显示当前运行进程</p><p>top ，按 b</p></li><li><p>显示 完整命令</p><p>top ，按 c</p></li><li><p>退出top程序</p><p>按 q</p></li></ol><p><strong>命令wget</strong></p><p>Linux系统中的wget是一个下载文件的工具，对于Linux用户是必不可少的工具</p><p>文件地址</p><p><a href="http://51.istester.com/isTester.png">http://51.istester.com/isTester.png</a></p><ol><li><p>下载isTester.jpg文件</p><p>wget <a href="http://51.istester.com/isTester.png">http://51.istester.com/isTester.png</a></p></li><li><p>下载isTester.jpg文件，并存储名为isTester_Logo.jpg</p><p>wget -o isTester_Logo.jpg </p><p><a href="http://51.istester.com/isTester.png">http://51.istester.com/isTester.png</a></p></li><li><p>下载isTester.jpg文件，后台形式下载</p><p>wget -b <a href="http://51.istester.com/isTester.png">http://51.istester.com/isTester.png</a></p></li></ol><p><strong>命令 find</strong></p><p>​    find命令，非常强大，也非常实用，分两次完成，今日第一次 。</p><p>​    给大家布置的作业，是比较实用的几个场景 。</p><ol><li><p>在/root/isTester 目录及其子目录下面查找名字为isTester.ini的文件 </p><p>find /root/isTester/ -name isTester.ini</p></li><li><p>在当前目录及其子目录中查找任何扩展名为“ini”的文件</p><p>find . -name “*.ini”</p></li><li><p>在/root/isTester目录下查找更改时间在5日以内的文件 </p></li></ol><p>​    find /root/isTester/ -mtime +5</p><ol start="4"><li><p>在/root/isTester目录下查找更改时间在3日以前的文件</p><p>find /root/isTester/ -mtime -3</p></li><li><p>在/root/isTester目录下查找所有的目录</p><p>find . -type d</p></li><li><p>在/root/isTester目录下查找所有的文件</p><p>find /root/isTester/ -type f</p></li></ol><p><strong>命令 继续find（进阶）</strong></p><p>find命令，非常强大，也非常实用，分两次完成，今日第一次 。</p><p>给大家布置的作业，是比较实用的几个场景 。</p><ol><li><p>在当前目录，所有的普通文件中搜索istester这个词</p><p>find ./ -type f |xargs grep “istester”</p></li><li><p>在当前目录，删除1天以内的所有东西 </p><p>find ./ -mtime -1 -print | xargs rm -rf</p></li><li><p>在当前目录，删除10天以前的所有东西（实操的时候，需谨慎，确保在自己建的目录内，别把系统目录删了…）</p><p>find ./ -mtime +10 -print | xargs rm -rf</p></li><li><p>删除文件大小为零的文件</p><p>find ./ -size 0 | xargs rm -rf</p></li></ol><p><strong>命令 rm</strong></p><p>rm是常用的命令，该命令的功能为删除目录/文件（可同时删除，多个文件 / 多个目录）</p><p>当然，这也是一个非常危险的命令，建议少用（比如经常出现的误操作 rm * -rf 此命令慎用）</p><ol><li><p>删除/root/isTester/目录下的文件isTester.ini （系统会询问是否删除）</p><p>rm /root/isTester/isTester.ini</p></li><li><p>强行删除/root/isTester/目录下的文件isTester.ini（直接删除，系统不会提示）</p></li></ol><p>​    rm -f /root/isTester/isTester.ini</p><ol start="3"><li>删除/root/isTester/目录下的所有.log文件</li></ol><p>​    rm -f /root/isTester/*.log</p><ol start="4"><li>删除/root/isTester/目录下的 ido/文件夹</li></ol><p>​    rm -r /root/isTester/ido/</p><ol start="5"><li>强行删除/root/isTester/目录下的 ido/文件夹</li></ol><p>​    rm -rf /root/isTester/ido/</p><ol start="6"><li>删除/root/isTester/目录下的所有内容</li></ol><p>​    rm -rf /root/isTester/*</p><p><strong>文件操作系列 命令</strong></p><ol><li><p>创建文件，你知道有哪几个命令 ？（写出至少两种方式）  </p><ol><li><p>touch isTester.ini  </p></li><li><p>vi isTester.md</p></li><li><p>echo ‘only test’ &gt; <a href="http://istester.com/">isTester.com</a></p></li><li><p>cp isTester.ini isTester666.ini</p></li><li><p>ls &gt; fileList.txt</p></li></ol></li></ol><ol start="2"><li><p>同时创建文件 isTester6.ini idoxu.ini</p><p>touch isTester6.ini idoxu.ini</p></li><li><p>同时创建2000个文件 isTester0001.ini - isTester2000.ini</p><p>touch istester{0001..2000}.ini</p></li><li><p>更改文件 isTester.ini时间为当前时间</p><p>touch isTester.ini</p></li></ol><p><strong>查看文件系列 命令</strong></p><p>命令提示</p><p>#cat 由第一行开始显示档案内容 </p><p>#tac 从最后一行开始显示，可以看出 tac 是 cat 的倒着写！ </p><p>#more 一页一页的显示档案内容 </p><p>#less 与 more 类似，但是比 more 更好的是，他可以往前翻页！ </p><p>#head 只看头几行 </p><p>#tail 只看尾巴几行 </p><p>#nl  显示的时候，顺道输出 行号！ </p><ol><li>查看文件 isTester.ini的内容</li></ol><p>​    cat isTester.ini</p><ol start="2"><li>看文件 isTester.ini前20行内容</li></ol><p>​    head -n 20 isTester.ini</p><ol start="3"><li>看文件 isTester.ini最后30行内容</li></ol><p>​    tail -n 30 isTester.ini</p><ol start="4"><li>显示文件isTester.ini 的第10至20行的内容</li></ol><p>​    head -n 20 isTester.ini | tail -n 10</p><ol start="5"><li>倒序显示文件isTester.ini 前10行的内容</li></ol><p>​    tac isTester.ini | head -n 10</p><ol start="6"><li>显示文件isTester.ini 前10行的内容，并显示行号</li></ol><p>​    nl isTester.ini | head -n 10</p><p><strong>命令 yum &amp; scp</strong></p><p><strong># 假设 当前服务器ip  192.168.1.23</strong></p><ol><li><p>从Linux服务器192.168.1.22 拷贝文件isTester.ini 到服务器192.168.1.23</p><p>scp <a href="mailto:&#x72;&#111;&#x6f;&#116;&#x40;&#49;&#x39;&#50;&#46;&#49;&#54;&#x38;&#x2e;&#49;&#x2e;&#50;&#50;">&#x72;&#111;&#x6f;&#116;&#x40;&#49;&#x39;&#50;&#46;&#49;&#54;&#x38;&#x2e;&#49;&#x2e;&#50;&#50;</a>:/root/idoxu/isTester.ini /root/idoxu </p></li><li><p>从Linux服务器192.168.1.22 拷贝目录 isTester/ 到服务器192.168.1.23</p><p>scp -r <a href="mailto:&#x72;&#x6f;&#x6f;&#116;&#64;&#49;&#x39;&#x32;&#x2e;&#49;&#54;&#x38;&#x2e;&#49;&#46;&#50;&#50;">&#x72;&#x6f;&#x6f;&#116;&#64;&#49;&#x39;&#x32;&#x2e;&#49;&#54;&#x38;&#x2e;&#49;&#46;&#50;&#50;</a>:/root/idoxu/isTester/ /root/idoxu</p></li><li><p>Linux下安装scp命令（假设是centos服务器，命令用yum）</p><p>yum install openssh-clients </p></li></ol><p><strong>命令</strong></p><p><strong>clear</strong></p><p><strong>df</strong></p><p><strong>du</strong></p><p><strong>ifconfig</strong></p><ol><li><p>查看当前服务器ip</p><p>ifconfig</p></li><li><p>查看当前服务器硬盘空间</p><p>df -h</p></li><li><p>查看目录isTester/ 所占有的空间</p><p>du -sh isTester</p></li><li><p>清空当前终端屏幕</p><p>clear</p></li></ol><p><strong>命令 vi + chmod</strong></p><p>/** </p><p>vi 创建文件 + 编辑文件 。</p><p>chmod命令用于改变linux系统文件或目录的访问权限 。</p><p>**/</p><ol><li><p>创建文件 isTester.ini</p><p>vi isTester.ini</p></li><li><p>更新文件内容为“21 day Linux Learn ,I’m Idolaoxu,in shenzhen .</p></li></ol><p>”</p><p>输入 i ，进入编辑模式，输入内容，esc进入命令模式 :wq 保存 。</p><ol start="2"><li><p>将文件 isTester.ini 设为所有人皆可读取</p><p>chmod +r isTester.ini</p></li><li><p>将 isTester.ini 设定为只有该文件拥有者可以执行</p><p>chmod u+x isTester.ini</p></li><li><p>给文件 isTester.ini 设置所有权限</p><p>chmod 777 isTester.ini (或者 chmod a=rwx isTester.ini)</p></li></ol><p>注：chmod还有很多命令用法，如上几种，满足日常需求 。</p><p>比如，想了解 top命令咋用 ？</p><p>终端输入 top –help 即可 </p><p><strong>最后，关于Linux学习的几个建议 。</strong></p><ol><li><p>每个命令，多敲几次，每天掌握此文的一个命令即可，勿贪多 。</p></li><li><p>掌握了前面的一个命令，再继续下一个命令。否则，欠的技术债会越来越多，最后放弃学习 。</p></li><li><p>学Linux，没诀窍，多敲命令 。</p></li><li><p>此文的命令，一个循环，预计你需要21天完成 。总共三个循环 ，2个月，大功告成 。</p></li></ol><p><strong>所谓的三循环理论：</strong></p><p>第一遍，花21天时间，把每个命令，敲一遍 。</p><p>第二遍，花21天时间，把每个命令，再熟悉一遍 。</p><p>第三遍，花21天时间，巩固，延伸更多命令组合玩法，熟记于心 。</p><p><strong>如果你能看到这段文字，且是第三遍以上看到，恭喜你，Linux这块的知识点，差不多了 。</strong></p><p><strong>你，可以开始下一个环节 Jenkins / 接口自动化  / 数据库 / 性能测试  /  测试管理  等等 的 专项学习 。</strong></p><p><strong>事情很多，别急，慢慢来 。</strong></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;&lt;strong&gt;命令 cd&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;如何进入上级目录&lt;/p&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;</summary>
      
    
    
    
    
    <category term="Linux" scheme="https://emilyty.github.io/tags/Linux/"/>
    
  </entry>
  
  <entry>
    <title>github+hexo搭建博客遇到的坑</title>
    <link href="https://emilyty.github.io/2020/11/15/github-hexo%E6%90%AD%E5%BB%BA%E5%8D%9A%E5%AE%A2%E9%81%87%E5%88%B0%E7%9A%84%E5%9D%91/"/>
    <id>https://emilyty.github.io/2020/11/15/github-hexo%E6%90%AD%E5%BB%BA%E5%8D%9A%E5%AE%A2%E9%81%87%E5%88%B0%E7%9A%84%E5%9D%91/</id>
    <published>2020-11-15T03:24:30.000Z</published>
    <updated>2020-11-15T03:39:08.605Z</updated>
    
    <content type="html"><![CDATA[<p>搭建GitHub博客教程：<a href="https://www.cnblogs.com/liuxianan/p/build-blog-website-by-hexo-github.html">https://www.cnblogs.com/liuxianan/p/build-blog-website-by-hexo-github.html</a></p><p>为了防止失效，先截个图保存一下</p><img src="github+hexo搭建博客教程.png" alt="github+hexo搭建博客教程" style="zoom:1%;" /><p><strong>1、hexo init一直卡住无法继续</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ hexo init</span><br><span class="line">INFO  Cloning hexo-starter https:&#x2F;&#x2F;github.com&#x2F;hexojs&#x2F;hexo-starter.git </span><br></pre></td></tr></table></figure><p>出现这个问题的主要原因是安装源，可以重置安装源为taobao</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm config set registry https:&#x2F;&#x2F;registry.npm.taobao.org</span><br></pre></td></tr></table></figure><p>2、本地博客hexo d提交到GitHub后通过username.github.io访问页面空白</p><p>GitHub页面默认读的是main分支，所以把分支改为master分支就可。入口为仓库的settings。</p><img src="image-20201115113744828.png" alt="image-20201115113744828" style="zoom:33%;" />]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;搭建GitHub博客教程：&lt;a href=&quot;https://www.cnblogs.com/liuxianan/p/build-blog-website-by-hexo-github.html&quot;&gt;https://www.cnblogs.com/liuxianan/p/bui</summary>
      
    
    
    
    <category term="工具" scheme="https://emilyty.github.io/categories/%E5%B7%A5%E5%85%B7/"/>
    
    
    <category term="搭建GitHub博客" scheme="https://emilyty.github.io/tags/%E6%90%AD%E5%BB%BAGitHub%E5%8D%9A%E5%AE%A2/"/>
    
  </entry>
  
  <entry>
    <title>hexo文章用Typora插入图片方法</title>
    <link href="https://emilyty.github.io/2020/11/15/hexo%E6%96%87%E7%AB%A0%E7%94%A8Typora%E6%8F%92%E5%85%A5%E5%9B%BE%E7%89%87%E6%96%B9%E6%B3%95/"/>
    <id>https://emilyty.github.io/2020/11/15/hexo%E6%96%87%E7%AB%A0%E7%94%A8Typora%E6%8F%92%E5%85%A5%E5%9B%BE%E7%89%87%E6%96%B9%E6%B3%95/</id>
    <published>2020-11-15T03:04:01.000Z</published>
    <updated>2021-02-02T10:36:12.196Z</updated>
    
    <content type="html"><![CDATA[<p>Typora是一个markdown编辑器，可以直接贴入图片。配置如下</p><p>首先修改根目录的_config.yml文件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">post_asset_folder: true</span><br></pre></td></tr></table></figure><p>通过<code>$ hexo new page1</code> 创建博客的时候source/_posts文件下生成一个同名文件夹</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">page1.md</span><br><span class="line">page1</span><br></pre></td></tr></table></figure><p><strong>Typora偏好设置</strong></p><hr><img src="image-20201115111213215.png" alt="tupian" style="zoom:40%;" /><p><strong>图片插入方式</strong></p><hr><ul><li><p>图片粘贴到文件后生成图片路径，并且把图片复制到同名的文件夹里。默认的图片路径push到git后无法访问，需要修改文件路径。</p><p>默认生成的图片路径为<code>![tupian](page1/putian.jpg)</code>，把图片路径修改为<code> ![](tupian.jpg)</code>就可以进行访问了。</p></li><li><p>图片比较大的情况下可以通过img标签进行缩放：</p></li></ul><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&lt;img src&#x3D;&quot;tupian.png&quot; alt&#x3D;&quot;tupian&quot; style&#x3D;&quot;zoom:50%;&quot; &#x2F;&gt;</span><br></pre></td></tr></table></figure><ul><li>图片居中方式：</li></ul><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&lt;div align&#x3D;center&gt; </span><br><span class="line">    &lt;img src&#x3D;&quot;tupian.png&quot; alt&#x3D;&quot;tupian&quot; style&#x3D;&quot;zoom:50%;&quot; &#x2F;&gt;</span><br><span class="line">&lt;&#x2F;div&gt;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;Typora是一个markdown编辑器，可以直接贴入图片。配置如下&lt;/p&gt;
&lt;p&gt;首先修改根目录的_config.yml文件&lt;/p&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;s</summary>
      
    
    
    
    <category term="工具" scheme="https://emilyty.github.io/categories/%E5%B7%A5%E5%85%B7/"/>
    
    
    <category term="搭建GitHub博客" scheme="https://emilyty.github.io/tags/%E6%90%AD%E5%BB%BAGitHub%E5%8D%9A%E5%AE%A2/"/>
    
  </entry>
  
  <entry>
    <title>测试负责人都干了啥</title>
    <link href="https://emilyty.github.io/2020/11/14/%E4%BB%8E%E6%B5%8B%E8%AF%95%E5%B7%A5%E7%A8%8B%E5%B8%88%E5%88%B0%E6%B5%8B%E8%AF%95%E8%B4%9F%E8%B4%A3%E4%BA%BA/"/>
    <id>https://emilyty.github.io/2020/11/14/%E4%BB%8E%E6%B5%8B%E8%AF%95%E5%B7%A5%E7%A8%8B%E5%B8%88%E5%88%B0%E6%B5%8B%E8%AF%95%E8%B4%9F%E8%B4%A3%E4%BA%BA/</id>
    <published>2020-11-14T09:44:29.000Z</published>
    <updated>2020-11-15T01:22:34.452Z</updated>
    
    <content type="html"><![CDATA[<p>​        作为测试负责人需要有大局观，对长期产品线来讲的话，产品发起需求沟通前主动询问产品规划，每个阶段需要完成的任务心里有数。根据产品规划协调资源，准备接任务。</p><p>​        下面再详细看看，作为测试负责人平时都干了什么活儿……</p><p><font size=5><strong>需求沟通阶段</strong></font></p><p><strong>一. 需求规划阶段</strong></p><ul><li>找各个模块的产品经理获取产品规划书，对接下来要完成的任务有一个大概的范围</li><li>职能部门领导沟通工作量和时间节点，并提前申请部分测试资源</li></ul><p><strong>二. 需求沟通阶段</strong></p><ul><li><p>熟悉需求，并分析需求，有疑问的地方抛出问题，与产品共同讨论</p></li><li><p>组织相关人员拆分任务、评估时间和任务优先级</p></li><li><p>确认工作量、时间节点和相关可用资源</p></li><li><p>无法在迭代周期内完成的任务先找产品砍需求，不能砍的需求，让产品找职能部门申请更多的资源或者调整其它产品的优先级。</p></li></ul><hr><p><font size=5><strong>产品开发与测试阶段</strong></font></p><p><strong>一. 开发阶段</strong></p><ul><li>主动了解开发进度，每天发送进度报告，如有延期及时再邮件理提出</li><li>延期严重并跟开发本人沟通后，仍然不能解决的找相关负责人进行进一步的沟通</li></ul><p><strong>二. 测试阶段</strong></p><ol><li><p>提测前</p><ul><li>根据需求制定合适的测试方案和测试策略</li><li>合理分配任务</li><li>审核测试工程师测试用例</li><li>组织用例评审</li></ul></li><li><p>提测后</p><ul><li>关注风险/延期，以及质量和进度的平衡</li><li>跟踪测试进度，严格把控时间</li><li>把控产品质量，每个测试工程师提交缺陷情况</li><li>监控测试用例执行情况，有必要的情况下抽查测试</li><li>及时询问，如有问题主动推动解决</li><li>随时准备接收临时任务和拒绝</li><li>根据需求和提测情况确定回归测试方案   </li></ul></li></ol><hr><p><font size=5><strong>测试验收阶段</strong></font></p><ul><li>组织相关负责人处理遗留问题，确认风险</li><li>出测试报告</li><li>审核工程师测试报告和风险</li><li>组织升级测试 &amp; 跟踪升级测试结果</li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;​        作为测试负责人需要有大局观，对长期产品线来讲的话，产品发起需求沟通前主动询问产品规划，每个阶段需要完成的任务心里有数。根据产品规划协调资源，准备接任务。&lt;/p&gt;
&lt;p&gt;​        下面再详细看看，作为测试负责人平时都干了什么活儿……&lt;/p&gt;
&lt;p&gt;&lt;</summary>
      
    
    
    
    <category term="管理" scheme="https://emilyty.github.io/categories/%E7%AE%A1%E7%90%86/"/>
    
    
    <category term="测试管理" scheme="https://emilyty.github.io/tags/%E6%B5%8B%E8%AF%95%E7%AE%A1%E7%90%86/"/>
    
  </entry>
  
  <entry>
    <title>遇到的软件需求评审到发布的流程</title>
    <link href="https://emilyty.github.io/2020/11/14/%E9%81%87%E5%88%B0%E7%9A%84%E8%BD%AF%E4%BB%B6%E9%9C%80%E6%B1%82%E8%AF%84%E5%AE%A1%E5%88%B0%E5%8F%91%E5%B8%83%E7%9A%84%E6%B5%81%E7%A8%8B/"/>
    <id>https://emilyty.github.io/2020/11/14/%E9%81%87%E5%88%B0%E7%9A%84%E8%BD%AF%E4%BB%B6%E9%9C%80%E6%B1%82%E8%AF%84%E5%AE%A1%E5%88%B0%E5%8F%91%E5%B8%83%E7%9A%84%E6%B5%81%E7%A8%8B/</id>
    <published>2020-11-14T06:50:34.000Z</published>
    <updated>2020-11-14T07:33:16.373Z</updated>
    
    <content type="html"><![CDATA[<p>分享一下目前正在执行中的需求评审到发布的测试流程，主要是针对产品开发，项目开发的流程跟这个稍有区别。</p><p><strong>需求评审</strong></p><ul><li><p><strong>组织者：</strong>产品经理</p></li><li><p><strong>参与人员：</strong>开发、测试、产品经理、相关领导</p></li><li><p><strong>目的：</strong>确认需求是否完整、业务逻辑是否合理</p></li><li><p><strong>通过标准：</strong>需求不存在逻辑漏洞，文档相对完善</p></li><li><p><strong>作为测试人员可以做的事情：</strong>①提前阅读需求文档；②评审前或者评审中积极参与讨论，提出建议；③需求明显不合理的情况下有勇气拒绝；</p></li></ul><p><strong>任务拆分和评估</strong> </p><ul><li><strong>组织者：</strong>测试负责人（master）</li><li><strong>参与人员：</strong>开发、测试、产品经理</li><li><strong>任务拆分原则：</strong>可独立测试；必现实现和可选择实现的任务分开；可以发布和暂时不能发布的任务拆开；拆分后的任务可评估，不能太大；</li></ul><p><strong>测试方案和用例设计</strong></p><ul><li>公司内部统一测试用例编写方式，便于后期管理和维护；</li><li>尽量指定同一个人来编写，可以保持用例设计方法一致，后期维护快捷；</li><li>统一测试用例编写工具。</li><li>测试方案模板统一。</li></ul><p><strong>测试方案和用例评审</strong></p><ul><li><strong>组织者：</strong>方案和用例设计者</li><li><strong>参与人员：</strong>测试领导、测试人员、开发、产品经理</li><li><strong>目的：</strong>用例和方案设计是否合理，逻辑是否清晰；覆盖率是否达标，有无遗漏点；对需求文档理解是否一致；</li></ul><p><strong>冒烟测试</strong> - </p><p><strong>执行者：</strong>开发或者测试人员</p><p><strong>目的：</strong>冒烟通过是测试准入的标准，如果冒烟都不通过，那么就没有必要浪费时间了。</p><p>通常公司都要求开发自测，如果开发一直说已自测过，但是经常冒烟都不通过的情况下，测试可以提供一些冒烟用例给开发进行自测。</p><p><strong>系统测试</strong> - </p><ul><li><strong>执行测试：</strong>测试人员</li><li><strong>测试方式：</strong>手动或者自动</li><li><strong>注意试项：</strong>用例需要标注通过或失败；有问题必须建issue，不能口头通知后直接进行修改；</li></ul><p><strong>测试报告</strong> </p><ul><li><strong>编写人员：</strong>测试人员</li><li><strong>注意试项：</strong>测试报告格式统一；包含发布风险和测试结果；包含依赖服务编排和测试通过编排；还可以增加更多的质量统计数据；</li></ul><p><strong>预发布环境验证</strong></p><ul><li><strong>执行者：</strong>测试人员</li><li><strong>目的：</strong>防止升级失败；一定程度上可以发现程序里写死某些环境变量的问题；验证开发提供的升级流程和运维编写的发布脚本是否正确；</li></ul><p>最后附上流程图一张</p><figure class="image-bubble">                <div class="img-lightbox">                    <div class="overlay"></div>                    <img src="测试流1程.jpg" alt="" title="">                </div>                <div class="image-caption"></div>            </figure>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;分享一下目前正在执行中的需求评审到发布的测试流程，主要是针对产品开发，项目开发的流程跟这个稍有区别。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;需求评审&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;组织者：&lt;/strong&gt;产品经理&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;</summary>
      
    
    
    
    <category term="软件测试" scheme="https://emilyty.github.io/categories/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/"/>
    
    
    <category term="软件测试" scheme="https://emilyty.github.io/tags/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/"/>
    
    <category term="软件测试流程" scheme="https://emilyty.github.io/tags/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E6%B5%81%E7%A8%8B/"/>
    
  </entry>
  
  <entry>
    <title>jmeter如何连接mysql数据库</title>
    <link href="https://emilyty.github.io/2018/02/23/jmeter%E5%A6%82%E4%BD%95%E8%BF%9E%E6%8E%A5mysql%E6%95%B0%E6%8D%AE%E5%BA%93/"/>
    <id>https://emilyty.github.io/2018/02/23/jmeter%E5%A6%82%E4%BD%95%E8%BF%9E%E6%8E%A5mysql%E6%95%B0%E6%8D%AE%E5%BA%93/</id>
    <published>2018-02-23T07:24:57.000Z</published>
    <updated>2020-11-14T09:28:14.335Z</updated>
    
    <content type="html"><![CDATA[<p>首先下载mysql驱动包（下载地址：<a href="http://download.csdn.net/download/emilyty/9586858%EF%BC%89%E3%80%82">http://download.csdn.net/download/emilyty/9586858）。</a><br>然后把mysql的驱动包放在jmeter的lib目录下。</p><p><strong>jmeter如何连接mysql数据库</strong> </p><hr><p><strong>1、在测试计划里引入mysql驱动包</strong></p><p> 点击【浏览】按钮，在jmeter/lib目录下选择mysql驱动包。如图所示：</p><p>   <img src="/2018/02/23/jmeter%E5%A6%82%E4%BD%95%E8%BF%9E%E6%8E%A5mysql%E6%95%B0%E6%8D%AE%E5%BA%93/1.jpg"></p><p><strong>2.添加线程组</strong><br>    选中测试计划-&gt;右键-&gt;添加-&gt;Threads(Users)-&gt;线程组</p><figure class="image-bubble">                <div class="img-lightbox">                    <div class="overlay"></div>                    <img src="2.png" alt="2" title="">                </div>                <div class="image-caption">2</div>            </figure><p><strong>3.添加配置元件JDBC Connection Configuration</strong><br>    在线程组下添加JDBC Connection Configuration，添加方式如图所示：</p><figure class="image-bubble">                <div class="img-lightbox">                    <div class="overlay"></div>                    <img src="3.png" alt="3" title="">                </div>                <div class="image-caption">3</div>            </figure><p><strong>4.配置JDBC Connection Configuration</strong></p><blockquote><p>   <strong>Variable Name：</strong> 变量名称，需要变量名绑定到池。需要唯一标识。与JDBC取样器中的相对应，决定JDBC取样的配置。简单理解就是在JDBC request的时候确定去哪个绑定的配置。</p><p>   <strong>MaxNumber of Connection：</strong> 数据库最大链接数</p><p>   <strong>PoolTimeout：</strong> 数据库链接超时，单位ms</p><p>   <strong>Idle Cleanup Interval （ms）：</strong> 数据库空闲清理的间隔时间，单位ms</p><p>   <strong>Auto Commit：</strong>自动提交。有三个选项，true、false、编辑（自己通过jmeter提供的函数设置）</p><p>   <strong>Transaction Isolation：</strong>事务间隔级别设置，主要有如下几个选项：（对JMX加解密） TRANSACTION_REPEATABLE_READ事务重复读、TRANSACTION_READ_COMMITTED事务已提交读 TRANSACTION_SERIALIZABLE事务序列TRANSACTION_READ_UNCOMMITTED事务未提交读、TRANSACTION_NODE事务节点、DEFAULT默认、编辑</p><p>   <strong>Keep-Alive：</strong> 是否保持连接</p><p>   <strong>Max  Connection age （ms）：</strong>最大连接时长，超过时长的会被拒绝</p><p>   <strong>Validation Query：</strong>验证查询，检验连接是否有效（数据库重启后之前的连接都失效，需要验证查询）</p><p>   <strong>Database URL：</strong>如jdbc:mysql://localhost:3306/test，表示本地数据库，3306端口，请求访问的数据库名称为test，如果是远程数据库，例如数据库所在服务器IP为：192.168.11.120，请求的数据库名称为UserInfo，URL为dbc:mysql://192.168.11.120:3306/UserInfo</p><p>   <strong>JDBCDriver Class：</strong> JDBC的类，如com.mysql.jdbc.Driver</p></blockquote><p><img src="/2018/02/23/jmeter%E5%A6%82%E4%BD%95%E8%BF%9E%E6%8E%A5mysql%E6%95%B0%E6%8D%AE%E5%BA%93/4.jpg" alt="4"></p><p><strong>5.添加jdbc request</strong><br>    在线程组下添加sampler-&gt;jdbc request</p><figure class="image-bubble">                <div class="img-lightbox">                    <div class="overlay"></div>                    <img src="5.png" alt="5" title="">                </div>                <div class="image-caption">5</div>            </figure><pre><code>  jdbc request中填写sql语句。  注意：variable name必须跟JDBC Connection Configuration里设置的variable name一致。</code></pre><p><img src="/2018/02/23/jmeter%E5%A6%82%E4%BD%95%E8%BF%9E%E6%8E%A5mysql%E6%95%B0%E6%8D%AE%E5%BA%93/6.png" alt="6"></p><p><strong>6.查看结果</strong></p><blockquote><ul><li>添加查看结果树，聚合报告。</li><li>点击运行，运行结束后，查看结果。</li></ul></blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;首先下载mysql驱动包（下载地址：&lt;a href=&quot;http://download.csdn.net/download/emilyty/9586858%EF%BC%89%E3%80%82&quot;&gt;http://download.csdn.net/download/emilyty</summary>
      
    
    
    
    <category term="测试工具" scheme="https://emilyty.github.io/categories/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/"/>
    
    
    <category term="jmeter" scheme="https://emilyty.github.io/tags/jmeter/"/>
    
  </entry>
  
  <entry>
    <title>Config参数化方法</title>
    <link href="https://emilyty.github.io/2016/01/14/Config%E5%8F%82%E6%95%B0%E5%8C%96%E6%96%B9%E6%B3%95/"/>
    <id>https://emilyty.github.io/2016/01/14/Config%E5%8F%82%E6%95%B0%E5%8C%96%E6%96%B9%E6%B3%95/</id>
    <published>2016-01-14T05:28:15.000Z</published>
    <updated>2020-11-14T07:56:04.353Z</updated>
    
    <content type="html"><![CDATA[<p>1.创建csv文件，把需要的参数写在一列中。不需要写变量名称，直接写变量值就可以。</p><p>2.线程组中添加CSV Data Set Config</p><p>  如图所示：</p><p>​               <img src="/2016/01/14/Config%E5%8F%82%E6%95%B0%E5%8C%96%E6%96%B9%E6%B3%95/1-1.png" alt="1-1"><img src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" alt="点击并拖拽以移动"></p><p>3.设置CSV Data Set Config配置</p><p>​              <img src="/2016/01/14/Config%E5%8F%82%E6%95%B0%E5%8C%96%E6%96%B9%E6%B3%95/1-2.png" alt="1-2"><img src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" alt="点击并拖拽以移动"></p><p>Filename中填写文件路径和文件名称。如果文件放在jmeter的bin目录下，直接写文件名称就可以。</p><p>Variable names中填写自定义变量名称。</p><p>Recycle on EOF：到了文件尾处，是否循环读取参数。</p><p>Stop thread on EOF:到了文件尾处，是否停止线程。</p><p>当Recycle on EOF选择true时，Stop threadon EOF选择true和false无任何意义，通俗的讲，在前面控制了不停的循环读取，后面再来让stop或run没有任何意义</p><p>当Recycle on EOF选择false时，Stop threadon EOF选择true，线程4个，参数3个，那么只会请求3次</p><p>当Recycle on EOF选择false时，Stop thread on EOF选择false，线程4个，参数3个，那么会请求4次，但第4次没有参数可取，不让循环，所以第4次请求错误</p><p>4.参数化固定值</p><p>需要使用变量的地方换成自定的变量名称，编写格式：${自定义的变量名称}，如图所示的格式填写：</p><figure class="image-bubble">                <div class="img-lightbox">                    <div class="overlay"></div>                    <img src="1-3.png" alt="1-3" title="">                </div>                <div class="image-caption">1-3</div>            </figure><p>5.循环读取参数：</p><p>   1）通过线程组循环</p><p>Recycle on EOF和Stop thread on EOF进行设置，还需要把线程组的循环次数设置为需要的次数。</p><p>   2）通过循环控制器循环</p><p>如果使用循环控制器的话，可以把线程组设置为1，需要循环的次数在循环控制器中设置。配合着Recycle on EOF和Stop thread on EOF的设置使用。</p><p>注：如果使用循环控制器，需要把CSV Data Set Config放在循环控制器下面。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;1.创建csv文件，把需要的参数写在一列中。不需要写变量名称，直接写变量值就可以。&lt;/p&gt;
&lt;p&gt;2.线程组中添加CSV Data Set Config&lt;/p&gt;
&lt;p&gt;  如图所示：&lt;/p&gt;
&lt;p&gt;​               &lt;img src=&quot;/2016/01/14/</summary>
      
    
    
    
    <category term="测试工具" scheme="https://emilyty.github.io/categories/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/"/>
    
    
    <category term="jmeter" scheme="https://emilyty.github.io/tags/jmeter/"/>
    
  </entry>
  
</feed>
